Ste kdaj želeli ustvariti vznemirljivo igro z uporabo Pythonove knjižnice PyGame, a ste se počutili preobremenjeni s konceptom upravljanja časa? Če je tako, niste sami.
Čas je ena najbolj kritičnih komponent razvoja iger in razumevanje delovanja časa v PyGame je bistvenega pomena za ustvarjanje privlačnih in uspešnih iger. PyGame ponuja več uporabnih funkcij in modulov, ki vam omogočajo nadzor nad časom v vaših igrah.
Ustvarjanje preproste igre
Začnite z ustvarjanjem preproste igre, kjer se pravokotnik premika desno. Začeti, namestite pip na svojo napravo in uporabite spodnji ukaz za namestitev modula PyGame:
pip namestite pygame
Tukaj lahko najdete vse primere kode GitHub repo.
Ko je nameščen, uvozite modul PyGame. Nato ustvarite zaslon z velikostjo 800x600 in belo barvo ozadja ter dodajte pravokotni predmet. Koda bi morala izgledati nekako takole:
uvoz pygame
pygame.init()
zaslon = pygame.display.set_mode((800, 600))
ozadje = pygame. Površina (screen.get_size())
ozadje.fill((255, 255, 255))
rect = pygame. Rect(0, 0, 20, 20)
Po tem uporabite zanko while, da igra teče, pravokotni predmet pa naj se premika desno, dokler ne doseže konca zaslona.
tek = Prav
medtem teče:
za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False
rect.x += 1
če rect.x > 780:
rect.x = 0
screen.blit (ozadje, (0, 0))
pygame.draw.rect (zaslon, (0, 0, 0), pravokotni)
pygame.display.update()
Dodate lahko tudi uporabniške vnose in trčenja v igri. Spodaj je rezultat:
Pregled časovnega modula PyGame
Za nadzor časa v tej igri lahko uporabite pygame.time modul. Ta modul ponuja različne uporabne funkcije, vključno z a Ura predmet z metodami, kot je get_ticks(), počakaj(), in zamuda(). Z uporabo teh funkcij lahko preprosto nadzirate čas v igri.
Ustvarjanje predmeta ure za sledenje času
V PyGame lahko uporabite predmet Clock za spremljanje časa. Če želite ustvariti uro, preprosto uporabite naslednjo vrstico kode:
ura = pygame.time. ura()
S tem objektom Ura lahko zdaj spremljate čas v svoji igri. Obstaja tudi več drugih uporabnih funkcij, povezanih s predmetom Clock, kot so:
-
get_time(): S pomočjo te funkcije lahko pridobite čas, porabljen za vsak okvir igre. Za uporabo te funkcije preprosto dodajte naslednjo vrstico kode po zanki while:
Dodajte besedilni predmet za prikaz porabljenega časa:čas = ura.get_time()
pisava = pygame.font. SysFont('Arial', 18)
besedilo = font.render('Potreben čas: {} ms'.format (čas), Prav, (0, 0, 0))
screen.blit (besedilo, (0, 0)) -
kljukica(): S to funkcijo nastavite hitrost sličic v igri. Privzeto je hitrost sličic nastavljena na 60 FPS. Če ga želite nastaviti na 30 FPS, preprosto dodajte naslednjo vrstico kode:
clock.tick(30)
-
get_fps(): trenutno hitrost sličic v igri lahko pridobite z uporabo get_fps. Če želite uporabiti to funkcijo, preprosto dodajte naslednjo vrstico kode:
Za prikaz hitrosti sličic lahko dodate besedilni predmet:fps = clock.get_fps()
pisava = pygame.font. SysFont('Arial', 18)
besedilo = font.render('FPS: {}'.format (fps), Prav, (0, 0, 0))
screen.blit (besedilo, (0, 20)) -
tick_busy_loop(): Ta funkcija vam omogoča, da izračunate, koliko milisekund je minilo od zadnjega klica do kljukica() funkcijo. Če ga želite uporabiti, preprosto dodajte naslednjo vrstico kode:
clock.tick_busy_loop(30)
Pridobivanje časa z uporabo get_ticks
The get_ticks() funkcija vrne čas v milisekundah od inicializacije PyGame. Za uporabo te funkcije dodajte to vrstico kode:
time_elapsed = pygame.time.get_ticks()
Dodajte besedilni predmet za prikaz porabljenega časa:
pisava = pygame.font. SysFont('Arial', 18)
besedilo = font.render('Pretečeni čas: {} ms'.format (pretečeni_čas), Prav, (0, 0, 0))
screen.blit (besedilo, (0, 40))
Pretečeni čas lahko uporabite za implementacijo elementov igre, ki temeljijo na času, kot so okrepitve, ki trajajo določen čas. Na primer, lahko implementirate vklop, ki poveča hitrost predmeta rect za 5 sekund:
če pretečen čas / 5000 > 0:
rect.x += 5
Spodaj je rezultat:
Začasna zaustavitev igre z uporabo funkcij čakanja in zakasnitve
PyGame ponuja tudi dve funkciji, ki ju lahko uporabite za zaustavitev igre za določen čas: čakati funkcijo in zamuda funkcijo.
Za uporabo čakati preprosto dodajte naslednjo vrstico kode v zanko while:
pygame.time.wait(1000)
To bo igro ustavilo za 1000 milisekund (1 sekundo). Za uporabo zamuda preprosto dodajte naslednjo vrstico kode v zanko while:
pygame.time.delay(1000)
To bo zakasnilo naslednji okvir igre za 1000 milisekund (1 sekundo).
Razlike med čakanjem in zamudo
Obstaja nekaj razlik med čakati in zamuda funkcije. The čakati funkcija ustavi proces, da deli procesor z drugimi programi. The zamuda funkcija bo uporabila procesor, da bo zakasnitev natančnejša. To pomeni, da je zamuda funkcija zahteva več procesorske moči kot čakati funkcijo in je primeren za igre, ki zahtevajo natančen čas.
Ustvarjanje dogodka z uporabo set_timer
Lahko uporabite set_timer() funkcijo za ustvarjanje dogodka, ki se sproži po določenem času.
Dogodki v PyGame so objekti, ki vsebujejo informacije o uporabniških vnosih ali sporočilih, ki jih ustvari program. Če želite uporabiti to funkcijo, ustvarite dogodek po meri in dodajte to vrstico kode:
pygame.time.set_timer (CUSTOM_EVENT, 1000)
To bo ustvarilo dogodek, ki se sproži po 1000 milisekundah – 1 sekundi. Obstajajo različne vrste dogodkov, ki jih lahko sprožite, kot so premikanje miške, vnos s tipkovnico in okna. Vaša koda se lahko nato odzove na te dogodke na kakršen koli najbolj primeren način.
Na primer, če želite spremeniti os y pravokotnega predmeta po 1 sekundi ali ko se sproži dogodek po meri, lahko dodate to vrstico kode:
če event.type == CUSTOM_EVENT:
rect.y += 20
Na ta način lahko preprosto ustvarite časovno zasnovane dogodke v svoji igri, ki jih lahko uporabite za ustvarjanje zanimivega in zahtevnega igranja.
Sčasoma izboljšajte nadzor igre
S pomočjo nadzora časa lahko izboljšate nadzor nad igro. Čas lahko uporabite za izvajanje pogojev pospeševanja, zaviranja in celo konca igre. Številne igre uvajajo koncept bullet time, kjer se dogajanje za kratek čas upočasni.
Z uporabo funkcij nadzora časa v PyGame lahko preprosto implementirate takšne funkcije in še več v svoje igre.