Lær hvordan du måler tid og bruker den til å kontrollere ulike aspekter av spillet ditt.
I spillutvikling kan det å legge til tidsbaserte hendelser forbedre spillmekanikken betraktelig og gjøre spill mer engasjerende for spillere. Ved å inkludere tidtakere kan du introdusere utfordringer, lage tidsbegrensede mål eller legge til en følelse av at det haster med visse spillelementer.
Lag et enkelt spill
Start med å lage et enkelt spill for å forstå det grunnleggende. Bygg et spill hvor spilleren kan bevege seg til venstre og høyre, og det vil være en enkelt plattform. Opprett en ny fil med navnet simple-game.py og importer arkademodulen, som gir de nødvendige funksjonalitetene for å lage spillet.
Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.
Deretter definerer du GameWindow klasse, som er en underklasse av arkade. Vindu. Inne i GameWindow-klassen, definer __i det__ metode, som initialiserer vinduet med den angitte bredden, høyden og tittelen.
De on_key_press metoden oppdager trykk på venstre eller høyre piltast. Trykk til venstre reduseres spiller_x med 10 enheter mens du trykker på høyre øker den med 10 enheter. Dette lar spilleren bevege seg horisontalt i spillvinduet.
For å kjøre spillet må du definere hovedfunksjonen, lage en forekomst av GameWindow, kalle oppsettmetoden for å sette opp spillvinduet, og til slutt starte spillløkken med arcade.run().
Utforming av timer-klassestrukturen
For å implementere timere i spillet ditt, kan du opprette en timer-klasse med de nødvendige attributtene og metodene. Denne klassen vil gi funksjoner for å starte timeren, stoppe den, hente den medgåtte tiden og sjekke om timeren har utløpt. Her er den grunnleggende strukturen for Timer-klassen:
import tid
klasseTimer:
def__i det__(selv, varighet):
self.duration = varighet
self.start_time = 0
self.is_running = Falskdefstart(selv):
self.start_time = time.time()
self.is_running = ektedefStoppe(selv):
self.is_running = Falskdefget_elapsed_time(selv):
hvis self.is_running:
komme tilbake time.time() - self.start_time
komme tilbake0
defer_utløpt(selv):
komme tilbake self.get_elapsed_time() >= self.duration
Timer-klassen tar en varighet parameter i sekunder under initialisering. Klassen inneholder attributter som f.eks starttid for å lagre klokkeslettet når tidtakeren startet, og løper for å spore timerens tilstand.
De start() metoden setter start_time til gjeldende tid ved hjelp av time.time() og setter kjører til ekte. De Stoppe() metoden setter ganske enkelt is_running til Falsk. De get_elapsed_time() metoden beregner medgått tid ved å trekke start_time fra gjeldende tid.
Hvis tidtakeren kjører, returnerer den medgått tid; ellers returnerer den 0. De er_utløpt() metoden sjekker om den medgåtte tiden er større enn eller lik varigheten, noe som indikerer at tidtakeren har utløpt.
Implementering av nedtellingstidtakere
For å demonstrere en nedtelling i spillet ditt, kan du starte tidtakeren når spilleren trykker på en bestemt tast, for eksempel mellomromstasten. Skriv ut nedtellingen til konsollen ved å bruke Pythons utskriftskommando. Opprett en ny fil med navnet timer.py og legg til koden med disse oppdateringene:
import tid
klasseGameWindow(arkade. Vindu):
def__i det__(selv):
super().__init__(WIDTH, HEIGHT, "Enkelt spill")
self.player_x = WIDTH // 2
self.player_y = HØYDE // 2
self.timer = Timer(10)defon_key_press(selv, nøkkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. ROM:
self.timer.start()
defon_draw(selv):
# Eksisterende kode
hvis self.timer.is_running:
elapsed_time = self.timer.get_elapsed_time()
r_time = self.timer.duration - elapsed_time
gjenværende_tid = maks (r_tid, 0)
skrive ut(f" Nedtelling: {gjenværende tid:.1f} sekunder")
Sørg for at du kan se terminalvinduet og spillvinduet samtidig. Deretter trykker du mellomrom og du vil se tidtakeren telle ned:
Håndtering av timerhendelser og utløsende handlinger
Du kan også utløse en funksjon som tegner et rektangel når nedtellingstidtakeren utløper. Opprett en ny fil med navnet handle-event.py og legg til koden med oppdateringene nedenfor:
defon_draw(selv):
# Eksisterende kode
hvis self.timer.is_expired():
self.draw_rectangle()
deftegne_rektangel(selv):
arcade.draw_rectangle_filled (WIDTH // 2, HØYDE // 2, 100, 100, rød)
Nedenfor er utgangen:
Pause, tilbakestille og gjenoppta timeren
For å legge til funksjonalitet for å sette på pause, tilbakestille og gjenoppta timeren, kan du utvide Timer klasse med passende metoder. Her er et eksempel:
klasseTimer:
# Eksisterende kodedefpause(selv):
self.duration -= self.get_elapsed_time()
self.is_running = Falskdefnullstille(selv):
self.start_time = 0
self.is_running = Falsk
defgjenoppta(selv):
self.start_time = time.time()
self.is_running = ekte
Legge til visuell tilbakemelding til timeren
For å gi visuell tilbakemelding for tidtakeren, kan du inkludere tekst eller grafiske elementer på spillskjermen. Opprett en ny fil med navnet visual.py og legg til koden med oppdateringene nedenfor:
defon_draw(selv):
# Eksisterende kode
hvis self.timer.is_running:
tekst = f" Nedtelling: {gjenværende tid:.1f} sekunder"
arcade.draw_text (tekst, 10, 10, svart, 18)
Du vil nå se tidtakeren direkte i spillvinduet i stedet for konsollen:
Inkludert tilleggsfunksjoner
For å forbedre tidsbaserte hendelser ytterligere, kan du vurdere å implementere følgende tilleggsfunksjoner i spillene dine.
Tidsbaserte power-ups eller bonuser
Introduser power-ups eller bonuser som dukker opp med jevne mellomrom gjennom hele spillet. Disse power-ups kan gi midlertidige evner, ekstra poeng, økt hastighet eller forbedrede våpen.
Ved å gjøre dem tidsbegrensede, må spillere samle dem strategisk innenfor en bestemt tidsramme for å få en fordel. Dette gir spenning og belønner rask tenkning.
Tidsbegrensede utfordringer
Lag tidsbegrensede utfordringer der spillere må fullføre en oppgave innen en viss tidsramme. For eksempel et puslespill eller en plattformseksjon som krever løsning innen en gitt tid.
Dette utfordrer spillere til å tenke og handle raskt, og gir en spennende følelse av at det haster med spillingen. Vellykket gjennomføring av disse utfordringene kan låse opp belønninger eller utvikle historien.
Tidsbestemte hindringer eller fiender
Implementer tidsbestemte hindringer eller fiender som utgjør en trussel for spilleren. For eksempel bevegelige plattformer som dukker opp og forsvinner med jevne mellomrom, eller fiender som blir uovervinnelige i en begrenset periode.
Spillere må time sine handlinger og bevegelser riktig for å navigere disse hindringene eller beseire fiender før tiden renner ut. Dette legger til et lag med strategi og koordinering til spillingen.
Beste praksis for tidsbaserte arrangementer
Når du implementerer tidsbaserte hendelser i spillene dine, er det viktig å følge disse beste fremgangsmåtene.
Test og balanse
Test dine tidsbaserte hendelser grundig for å sikre at de er rettferdige og balanserte. Finjuster varigheten, vanskelighetsgraden og belønningene for å skape hyggelige spillopplevelser.
Tilbakemelding fra bruker
Gi tydelig og intuitiv tilbakemelding til spillere angående timerens status og eventuelle tidsbaserte hendelser. Legge til lydeffekter, visuelle indikatorer eller tekstlige signaler kan hjelpe spillere å forstå tidsbegrensningene og konsekvensene av deres handlinger.
Konsistent tidsmåling
Bruk et konsekvent tidsmålingssystem gjennom hele spillet. Bruk for eksempel sekunder som enhet for alle tidtakere og tidsrelaterte beregninger. Dette sikrer konsistens og enkel forståelse for både spillere og utviklere.
Håndtak Edge Cases
Vurder scenarier der spillet kan settes på pause, minimeres eller kjøres i bakgrunnen. Håndter disse situasjonene på en elegant måte for å opprettholde nøyaktig timing og forhindre utilsiktet oppførsel når spillet gjenopptas.
Ved å følge disse beste fremgangsmåtene kan du lage tidsbaserte hendelser som forbedrer spillingen, utfordrer spillere og gir en balansert og hyggelig opplevelse.
Gjør spill morsommere med tidsbaserte hendelser
Ved å inkludere tidsbaserte hendelser i spillene dine, kan du skape en dynamisk og engasjerende opplevelse for spillere. Tidsbegrensede utfordringer gir spenning og haster, mens tidsbestemte power-ups eller hindringer kan skape strategiske beslutningsmuligheter.
Eksperimenter med forskjellige tidsbaserte mekanikker for å finne den rette balansen for spillet ditt, og husk å spilletest og gjenta for å maksimere moro og nytelse.