Uanset om en kollision giver en power-up eller fører til game over, skal du være i stand til at opdage det. Sådan gør du det med Pythons arkadebibliotek.
Kollisioner er et grundlæggende aspekt af gameplay i mange genrer af videospil. De tilføjer et lag af udfordring og spænding til spil, hvilket kræver, at spillere skal navigere forhindringer, undvige fjender og indsamle belønninger.
Implementering af kollisionsdetektion og håndtering i dine spil er afgørende for at skabe realistisk og dynamisk gameplay-mekanik, der holder spillerne engageret og underholdt. Du kan nemt registrere kollisioner med arkadebiblioteket ved hjælp af dets indbyggede funktioner.
Oprettelse af et simpelt spil
Før du starter, skal du sikre dig, at du har pip installeret på din enhed. Brug denne kommando til at installere arkadebiblioteket:
pip installere arkade
Derefter skal du oprette et spil, hvor spilleren kan bevæge sig til venstre og højre for at undgå at kollidere med et fjendens rektangel. Du kan bruge den indbyggede tegnefunktion til sprites.
Du kan finde den komplette kode i denne GitHub-repo.
Her er koden til spillet:
importere arkade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5klasseMit Spil(arkade. Vindue):
def__i det__(selv, bredde, højde):
super().__init__(bredde, højde, "Mit spil")
arcade.set_background_color (arcade.color. HVID)
self.player = arkade. SpriteSolidColor(50, 50, arkade.farve. BLÅ)
self.player.center_x = SCREEN_WIDTH // 3
self.player.center_y = 50
self.enmy = arkade. SpriteSolidColor(50, 50, arkade.farve. RØD)
self.enemy.center_x = SCREEN_WIDTH // 2
self.enemy.center_y = 50defon_draw(selv):
arcade.start_render()
self.player.draw()
self.enemy.draw()defon_key_press(selv, nøgle, modifikatorer):
hvis nøgle == arkade.nøgle. VENSTRE:
self.player.center_x -= MOVEMENT_SPEED
elif nøgle == arkade.nøgle. HØJRE:
self.player.center_x += MOVEMENT_SPEEDdefopdatering(selv, delta_tid):
hvis arcade.check_for_collision (selv.spiller, self.enmy):
Print("Game over")defvigtigste():
spil = Mit spil (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
hvis __navn__ == "__main__":
hoved()
Arcades kollisionsdetektionsfunktioner
Arcade-biblioteket giver en enkel måde at detektere kollisioner mellem sprites. Det check_for_collision funktion tager to sprites som argumenter og returnerer en boolsk værdi, der angiver, om sprites er stødt sammen. Du kan bruge denne funktion til at registrere kollisioner mellem spilleren og fjendens sprites i dit spil.
Du kan ændre opdatering metode til at tjekke for kollisioner mellem spilleren og fjendens sprites. Hvis biblioteket registrerer en kollision, kan du udskrive Game Over til konsollen.
Her er den opdaterede kode:
defopdatering(selv, delta_tid):
hvis arcade.check_for_collision (selv.spiller, self.enmy):
Print("Game over")
andet:
self.player.update()
Med denne ændring vil dit spil registrere kollisioner og udskrive Game Over tekst, hvis spilleren kolliderer med fjenden.
Tilføjelse af flere funktioner
For at gøre dit spil mere engagerende kan du tilføje ekstra funktioner såsom scoring, power-ups og flere fjender.
For eksempel kan du oprette en liste over fjender og opdatere spillet for at skabe nye fjender på tilfældige positioner efter hver kollision. Du kan flytte afspilleren venstre og højre for at undgå fjenden og score et point. Her er et eksempel på, hvordan du kan implementere disse funktioner:
importere tilfældig
klasseMit Spil(arkade. Vindue):
def__i det__(selv, bredde, højde):
super().__init__(bredde, højde, "Mit spil")
arcade.set_background_color (arcade.color. HVID)
self.player = arkade. SpriteSolidColor(50, 50, arkade.farve. BLÅ)
self.player.center_x = SCREEN_WIDTH // 2
self.player.center_y = 50
self.enemies = arkade. SpriteList()
selv.score = 0
til jeg i rækkevidde(3):
fjende = arkade. SpriteSolidColor(50, 50, arkade.farve. RØD)
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint (SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.enemies.append (fjende)defon_draw(selv):
arcade.start_render()
self.player.draw()
self.enemies.draw()
arcade.draw_text(f"Score: {selv.score}", 10, SCREEN_HEIGHT - 30, arkade.farve. SORT, 16)
defopdatering(selv, delta_tid):
hvis arcade.check_for_collision_with_list (self.player, self.enemies):
Print("Game over")
arcade.close_window()
andet:
self.player.update()
til fjende i self.enemies:
enemy.center_y -= MOVEMENT_SPEED / 2
hvis enemy.center_y < 0:
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint (SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.score += 1
Med disse ændringer har dit spil nu flere fjender, der gyder på tilfældige positioner og bevæger sig nedad. Spilleren optjener et point for hver succesfuld undgået fjende, og spillet slutter, hvis spilleren kolliderer med en fjende.
Forbedre brugerengagementet med kollisioner
Ved at tilføje kollisionsdetektion og håndteringsfunktioner til dine spil kan du skabe mere fordybende og udfordrende spiloplevelser for spillere. Fra simple undgå-og-saml-spil til mere komplekse platformspillere og skydespil spiller kollisioner en afgørende rolle i at skabe engagerende og tilfredsstillende gameplay-mekanik.
Så hvis du vil skabe mere engagerende og fordybende spil, der får spillerne til at vende tilbage efter mere, kan du overveje at inkorporere kollisionsdetektionsfunktioner i din gameplay-mekanik.