Enten en kollisjon gir en power-up eller fører til game over, må du være i stand til å oppdage det. Slik gjør du det med Pythons arkadebibliotek.
Kollisjoner er et grunnleggende aspekt ved spilling i mange sjangre av videospill. De legger til et lag med utfordring og spenning til spill, og krever at spillerne navigerer gjennom hindringer, unngår fiender og samler belønninger.
Implementering av kollisjonsdeteksjon og håndtering i spillene dine er avgjørende for å skape realistisk og dynamisk spillmekanikk som holder spillerne engasjert og underholdt. Du kan enkelt oppdage kollisjoner med arkadebiblioteket ved å bruke dets innebygde funksjoner.
Opprette et enkelt spill
Før du starter, sørg for at du har pip installert på enheten din. Bruk denne kommandoen for å installere arkadebiblioteket:
pip installer arkade
Etter det, lag et spill der spilleren kan bevege seg til venstre og høyre for å unngå å kollidere med et fiendtlig rektangel. Du kan bruke den innebygde tegnefunksjonen for sprites.
Du kan finne den komplette kode i denne GitHub-repoen.
Her er koden for spillet:
import arkade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5klasseMitt Spill(arkade. Vindu):
def__i det__(selv, bredde, høyde):
super().__init__(bredde, høyde, "Mitt spill")
arcade.set_background_color (arcade.color. HVIT)
self.player = arkade. SpriteSolidColor(50, 50, arkade.farge. BLÅ)
self.player.center_x = SCREEN_WIDTH // 3
self.player.center_y = 50
self.enemy = arkade. SpriteSolidColor(50, 50, arkade.farge. 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økkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. VENSTRE:
self.player.center_x -= MOVEMENT_SPEED
elif nøkkel == arkade.nøkkel. IKKE SANT:
self.player.center_x += MOVEMENT_SPEEDdefOppdater(selv, delta_tid):
hvis arcade.check_for_collision (selv.spiller, selv.fiende):
skrive ut("Spillet er over")defhoved-():
spill = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
hvis __navn__ == "__hoved__":
hoved()
Arcades kollisjonsdeteksjonsfunksjoner
Arcade-biblioteket gir en enkel måte å oppdage kollisjoner mellom sprites. De sjekk_for_kollisjon funksjonen tar to sprites som argumenter og returnerer en boolsk verdi som indikerer om sprites har kollidert. Du kan bruke denne funksjonen til å oppdage kollisjoner mellom spilleren og fiendens sprites i spillet ditt.
Du kan endre Oppdater metode for å se etter kollisjoner mellom spilleren og fiendens sprites. Hvis biblioteket oppdager en kollisjon, kan du skrive ut Spillet er over til konsollen.
Her er den oppdaterte koden:
defOppdater(selv, delta_tid):
hvis arcade.check_for_collision (selv.spiller, selv.fiende):
skrive ut("Spillet er over")
ellers:
self.player.update()
Med denne endringen vil spillet ditt oppdage kollisjoner og skrive ut Spillet er over tekst hvis spilleren kolliderer med fienden.
Legger til flere funksjoner
For å gjøre spillet ditt mer engasjerende kan du legge til ekstra funksjoner som scoring, power-ups og flere fiender.
Du kan for eksempel lage en liste over fiender og oppdatere spillet for å skape nye fiender på tilfeldige posisjoner etter hver kollisjon. Du kan flytte spilleren venstre og høyre for å unngå fienden og score et poeng. Her er et eksempel på hvordan du kan implementere disse funksjonene:
import tilfeldig
klasseMitt Spill(arkade. Vindu):
def__i det__(selv, bredde, høyde):
super().__init__(bredde, høyde, "Mitt spill")
arcade.set_background_color (arcade.color. HVIT)
self.player = arkade. SpriteSolidColor(50, 50, arkade.farge. BLÅ)
self.player.center_x = SCREEN_WIDTH // 2
self.player.center_y = 50
self.enemies = arkade. SpriteList()
self.score = 0
til Jeg i område(3):
fiende = arkade. SpriteSolidColor(50, 50, arkade.farge. RØD)
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint (SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.enemies.append (fiende)defon_draw(selv):
arcade.start_render()
self.player.draw()
self.enemies.draw()
arcade.draw_text(f"Score: {selv.score}", 10, SCREEN_HEIGHT - 30, arkade.farge. SVART, 16)
defOppdater(selv, delta_tid):
hvis arcade.check_for_collision_with_list (self.player, self.enemies):
skrive ut("Spillet er over")
arcade.close_window()
ellers:
self.player.update()
til fiende 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 endringene har spillet ditt nå flere fiender som gyter i tilfeldige posisjoner og beveger seg nedover. Spilleren tjener et poeng for hver vellykket unngått fiende, og spillet avsluttes hvis spilleren kolliderer med en fiende.
Forbedre brukerengasjementet med kollisjoner
Ved å legge til kollisjonsdeteksjon og håndteringsfunksjoner til spillene dine, kan du skape mer oppslukende og utfordrende spillopplevelser for spillere. Fra enkle unngå-og-saml-spill til mer komplekse plattformspillere og skytespill spiller kollisjoner en avgjørende rolle for å skape engasjerende og tilfredsstillende spillmekanikk.
Så hvis du ønsker å lage mer engasjerende og oppslukende spill som får spillere til å komme tilbake for mer, bør du vurdere å inkludere kollisjonsdeteksjonsfunksjoner i spillmekanikken din.