Odliczanie czasu [pygame]

0

Cześć,

W jaki sposób można zrobić odliczanie czasu (np 10 sekund) ?

Z góry dzięki za pomoc.

1

Skorzystaj z http://www.pygame.org/docs/ref/time.html#pygame.time.get_ticks

Pobierasz ticki raz przed rozpoczęciem odliczania (może to być jakiś trigger w grze - przycisk, zdarzenie, cokolwiek). W pętli gry sobie porównujesz bieżące ticki z tickami startowymi. Każdy 1000 z różnicy to jedna sekunda.

start_ticks=pygame.time.get_ticks() #pobranie tickow startowych
while 1: # glowna petla gry
	sekundy=(pygame.time.get_ticks()-start_ticks)/1000 #obliczenie ile sekund
	if sekundy>10: # jesli naliczylo wiecej niz 10 sekund to wychodzimy z gry
		break
	print (sekundy) #wypisz ile sekund
0

Dzięki

1

Ostatnio szukałem jak napisać w pythonie pygame upływ czasu. Dzięki temu forum powstał poniższy kod, może komuś się przyda.
Kod zegarka z interfejsem graficznym i pozycją myszy.

#By franjo3 2021
import pygame #dla okna i grafiki
import random #chwilowo nie potrzebny generator liczb losowych
import time #dla aktualnego czasu

pygame.init() #inicjacja mogułu - od tej pory tricker zlicza milisekundy
ekran = pygame.display.set_mode((1024, 768)) #nasze okno graficzne rozmiar 1024x768
pygame.font.init() #inicjacja modułu czcionek
#czas=30 chwilowo nie potrzevby


done = False # zmiana na True zakończy pętlę główną
f= pygame.font.SysFont("Arial", 120) #ładujemy czcionkę roboczą arial rozmiar 120
while not done: #pętla główna
    for event in pygame.event.get(): #przeszukujemy tablicę zdarzeń pygame
        if event.type == pygame.QUIT: # w poszukiwaniu zdarzenia typu pygame.QUIT
            done = True   #jeśli jest to koniec pętli
    pos=pygame.mouse.get_pos() #niech pos trzyma punkt wskaźnika myszy
    ekran.fill((0, 0, 0)) #pomaluj ekran na czarno    
    tx=f.render(str(pos), False, (10,10,170)) #tx to obrazek (renderowany tekst) z wyświetloną pozycją myszy w kolorze cośtam niebieskim
     
    sek=pygame.time.get_ticks()//1000#sek (sekundy) to aktualne milisekundy trickera podzielone całkowicie (do int) przez 1000 
    dni=sek//(3600*24) #wyodrębniamy ilość dni dzieląc sekundy na 24 godziny
    sek=sek%(3600*24) #pomniejszamy ilość sekund odejmując dni zostawiając resztę z dzielenia
    godz=sek//3600 # wyodrębniamy godziny dzieląc przez 3600 sekund
    sek=sek%3600 #pomniejszamy
    mit=sek//60 #minuty dzieląc przez 60
    sek=sek%60 #pomniejszamy
    #tworzymy tekstową reprezentację danych do wyświetlenia
    if (godz<10): g="0"+str(godz)#dodajemy zero do godziny mniejszej niż 10
    else: g=str(godz) #string z godziny
    g=g+":"#dodajemy dwukropek pomiędzy sekcjami
    if (mit<10): m="0"+str(mit)#dodajemy zero przed minutami jeśli mniejsze od 10
    else: m=str(mit)
    m=m+":"#dodajemy dwukropek pomiędzy sekcjami
    if (sek<10): s="0"+str(sek)
    else: s=str(sek)    
    tm=str(dni)+"dni, "+g+m+s#tm to tekst z pełnym składem danych
    tt=f.render(tm,False,(200,20,30))#renderujemy tm do obrazka tt na czerwono
    sek=int(time.time()) # aktualny czas w sekundach
    dni=sek//(3600*24)#dokładnie to samo co wyżej
    sek=sek%(3600*24)
    godz=sek//3600
    sek=sek%3600
    mit=sek//60
    sek=sek%60
    if (godz<10): g="0"+str(godz)
    else: g=str(godz)
    g=g+":"
    if (mit<10): m="0"+str(mit)
    else: m=str(mit)
    m=m+":"
    if (sek<10): s="0"+str(sek)
    else: s=str(sek)    
    tm=str(dni)+"dni, "+g+m+s
    tz=f.render(tm,False,(20,200,30))#tz obraz z renderowanym tm na zielono
    ekran.blit(tx,(0,0))#wyświetlamy nasze obrazy w odpowiednich miejscach
    ekran.blit(tt,(200,400))
    ekran.blit(tz,(0,600))
    
    pygame.display.flip()#uwalniamy bufor (wyświetlamy zmiany)
    #i od nowa pętla
    #NIE uwzględniłem czasu letniego, zimowego więc aktualny czas może się o godzinkę różnić :)
#jeśli zamknięto okno i zdarzenie pygame.QUIT się dopełniło        
pygame.font.quit() #kończymy moduł czcionek   
pygame.quit()#kończymy moduł pygame i okno się zamyka
#KONIEC [email protected] na konkretne pytania spróbuję odpowiedzieć ale też dopiero zaczynam więc nie zawsze pomogę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1