Lær, hvordan du måler tid og bruger den til at kontrollere forskellige aspekter af dit spil.
I spiludvikling kan tilføjelse af tidsbaserede begivenheder i høj grad forbedre spilmekanikken og gøre spil mere engagerende for spillere. Ved at inkorporere timere kan du introducere udfordringer, skabe tidsbegrænsede mål eller tilføje en følelse af, at det haster med bestemte spilelementer.
Opret et simpelt spil
Start med at lave et simpelt spil for at forstå det grundlæggende. Byg et spil, hvor spilleren kan bevæge sig til venstre og højre, og der vil være en enkelt platform. Opret en ny fil med navnet simple-game.py og importer arkademodulet, som giver de nødvendige funktioner til at skabe spillet.
Koden brugt i denne artikel er tilgængelig i denne GitHub-depot og er gratis for dig at bruge under MIT-licensen.
Dernæst skal du definere GameWindow klasse, som er en underklasse af arkade. Vindue. Inde i GameWindow-klassen skal du definere __i det__ metode, som initialiserer vinduet med den angivne bredde, højde og titel.
Det on_key_press metoden registrerer tryk på venstre eller højre piletast. Tryk til venstre formindskes spiller_x med 10 enheder, mens du trykker på højre, øges den med 10 enheder. Det her giver spilleren mulighed for at bevæge sig vandret i spilvinduet.
For at køre spillet skal du definere hovedfunktionen, oprette en forekomst af GameWindow, kalde opsætningsmetoden for at opsætte spilvinduet og til sidst starte spilløkken vha. arcade.run().
Design af timerens klassestruktur
For at implementere timere i dit spil kan du oprette en timer-klasse med de nødvendige attributter og metoder. Denne klasse giver funktioner til at starte timeren, stoppe den, hente den forløbne tid og kontrollere, om timeren er udløbet. Her er den grundlæggende struktur for Timer-klassen:
importere tid
klasseTimer:
def__i det__(selv, varighed):
self.duration = varighed
self.start_time = 0
self.is_running = FalskdefStart(selv):
self.start_time = time.time()
self.is_running = Rigtigtdefhold op(selv):
self.is_running = Falskdefget_elapsed_time(selv):
hvis self.is_running:
Vend tilbage time.time() - self.start_time
Vend tilbage0
defer_udløbet(selv):
Vend tilbage self.get_elapsed_time() >= self.duration
Timer-klassen tager en varighed parameter i sekunder under initialisering. Klassen indeholder attributter som f.eks starttidspunkt for at gemme det tidspunkt, hvor timeren startede, og løber for at spore timerens tilstand.
Det Start() metode indstiller start_time til det aktuelle tidspunkt ved hjælp af time.time() og sætter er_kører til Rigtigt. Det hold op() metode sætter simpelthen is_running til Falsk. Det get_elapsed_time() metoden beregner den forløbne tid ved at trække start_time fra det aktuelle tidspunkt.
Hvis timeren kører, returnerer den den forløbne tid; ellers returnerer den 0. Det er_udløbet() metoden kontrollerer, om den forløbne tid er større end eller lig med varigheden, hvilket indikerer, at timeren er udløbet.
Implementering af nedtællingstimere
For at demonstrere en nedtælling i dit spil kan du starte timeren, når spilleren trykker på en bestemt tast, såsom mellemrumstasten. Udskriv nedtællingen til konsollen ved hjælp af Pythons printkommando. Opret en ny fil med navnet timer.py og tilføj koden med disse opdateringer:
importere tid
klasseGameWindow(arkade. Vindue):
def__i det__(selv):
super().__init__(WIDTH, HEIGHT, "Simpelt spil")
self.player_x = BREDDE // 2
self.player_y = HØJDE // 2
self.timer = Timer(10)defon_key_press(selv, nøgle, modifikatorer):
hvis nøgle == arkade.nøgle. PLADS:
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
resterende_tid = maks. (r_tid, 0)
Print(f" Nedtælling: {resterende tid:.1f} sekunder")
Sørg for, at du kan se terminalvinduet og spilvinduet på samme tid. Tryk derefter på mellemrumstasten, og du vil se timeren tælle ned:
Håndtering af timerhændelser og udløsningshandlinger
Du kan også udløse en funktion, der tegner et rektangel når nedtællingstimeren udløber. Opret en ny fil med navnet handle-event.py og tilføj koden med nedenstående opdateringer:
defon_draw(selv):
# Eksisterende kode
hvis self.timer.is_expired():
self.draw_rectangle()
deftegne_rektangel(selv):
arcade.draw_rectangle_filled (WIDTH // 2, HØJDE // 2, 100, 100, rød)
Nedenfor er output:
Pause, nulstilling og genoptagelse af timeren
For at tilføje funktionalitet til pause, nulstilling og genoptagelse af timeren kan du forlænge Timer klasse med passende metoder. Her er et eksempel:
klasseTimer:
# Eksisterende kodedefpause(selv):
self.duration -= self.get_elapsed_time()
self.is_running = FalskdefNulstil(selv):
self.start_time = 0
self.is_running = Falsk
defGenoptag(selv):
self.start_time = time.time()
self.is_running = Rigtigt
Tilføjelse af visuel feedback til timeren
For at give visuel feedback til timeren kan du inkorporere tekst eller grafiske elementer på spilskærmen. Opret en ny fil med navnet visual.py og tilføj koden med nedenstående opdateringer:
defon_draw(selv):
# Eksisterende kode
hvis self.timer.is_running:
tekst = f" Nedtælling: {resterende tid:.1f} sekunder"
arcade.draw_text (tekst, 10, 10, sort, 18)
Du vil nu se timeren direkte i spilvinduet i stedet for konsollen:
Inklusiv yderligere funktioner
For yderligere at forbedre tidsbaserede begivenheder kan du overveje at implementere følgende ekstra funktioner i dine spil.
Tidsbaserede power-ups eller bonusser
Introducer power-ups eller bonusser, der dukker op med jævne mellemrum i løbet af spillet. Disse power-ups kunne give midlertidige evner, ekstra point, øget hastighed eller forbedrede våben.
Ved at gøre dem tidsbegrænsede, skal spillerne samle dem strategisk inden for en bestemt tidsramme for at opnå en fordel. Dette tilføjer spænding og belønner hurtig tænkning.
Tidsbegrænsede udfordringer
Opret tidsbegrænsede udfordringer, hvor spillere skal udføre en opgave inden for en bestemt tidsramme. For eksempel et puslespil eller platformssektion, der kræver løsning inden for en given tid.
Dette udfordrer spillere til at tænke og handle hurtigt, hvilket tilføjer en spændende følelse af, at det haster med spillet. Succesfuld gennemførelse af disse udfordringer kan låse op for belønninger eller fremskride historien.
Tidsindstillede forhindringer eller fjender
Implementer tidsindstillede forhindringer eller fjender, der udgør en trussel mod spilleren. For eksempel bevægelige platforme, der dukker op og forsvinder med jævne mellemrum, eller fjender, der bliver uovervindelige i en begrænset periode.
Spillere skal time deres handlinger og bevægelser korrekt for at navigere disse forhindringer eller besejre fjender, før tiden løber ud. Dette tilføjer et lag af strategi og koordination til gameplayet.
Bedste praksis for tidsbaserede begivenheder
Når du implementerer tidsbaserede begivenheder i dine spil, er det vigtigt at følge disse bedste fremgangsmåder.
Test og balance
Test dine tidsbaserede begivenheder grundigt for at sikre, at de er retfærdige og afbalancerede. Finjuster varigheden, sværhedsgraden og belønningerne for at skabe fornøjelige spiloplevelser.
Brugerfeedback
Giv spillerne klar og intuitiv feedback vedrørende timerens status og eventuelle tidsbaserede begivenheder. Tilføjelse af lydeffekter, visuelle indikatorer eller tekstlige signaler kan hjælpe spillere med at forstå tidsbegrænsningerne og konsekvenserne af deres handlinger.
Konsistent tidsmåling
Brug et konsekvent tidsmålingssystem gennem hele dit spil. Brug for eksempel sekunder som enhed for alle timere og tidsrelaterede beregninger. Dette sikrer sammenhæng og nem forståelse for både spillere og udviklere.
Håndtag Edge Cases
Overvej scenarier, hvor spillet kan være sat på pause, minimeret eller kører i baggrunden. Håndter disse situationer med ynde for at opretholde nøjagtig timing og forhindre utilsigtet adfærd, når spillet genoptages.
Ved at følge disse bedste praksisser kan du skabe tidsbaserede begivenheder, der forbedrer gameplayet, udfordrer spillere og giver en afbalanceret og fornøjelig oplevelse.
Gør spil sjovere med tidsbaserede begivenheder
Ved at inkorporere tidsbaserede begivenheder i dine spil kan du skabe en dynamisk og engagerende oplevelse for spillere. Tidsbegrænsede udfordringer tilføjer spænding og haster, mens tidsbestemte power-ups eller forhindringer kan skabe strategiske beslutningsmuligheder.
Eksperimenter med forskellige tidsbaserede mekanikker for at finde den rigtige balance til dit spil, og husk at spille teste og gentage for at maksimere sjov og nydelse.