Wyswietlenie sprita raz na 10 sekund

Wyswietlenie sprita raz na 10 sekund
ON
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak zrobic w metodzie update odliczanie ze raz na 10 sekund przez sekunde bedzie sie jedna linia wykonywala od rysowania.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
3
onizuka napisał(a):

Jak zrobic w metodzie update odliczanie ze raz na 10 sekund przez sekunde bedzie sie jedna linia wykonywala od rysowania.

A można prosić o zadanie tego samego pytania tylko w języku polskim?

DR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1135
0

Możesz użyć clock = pygame.time.Clock() i clock.tick() to ci pomoże z wyliczeniem czasu.

ON
  • Rejestracja: dni
  • Ostatnio: dni
0

Udalo mi sie cos takiego zrobic.

Kopiuj
    def update(self,surface):
        self.current_time = time.time()
        print(self.current_time)
        if self.current_time - self.last_time_displayed >= 10:
            surface.blit(self.animation_frames[self.animation_frame], (self.rect.x - 32, self.rect.y - 32))
            pygame.time.delay(1000)
            self.last_time_displayed = self.current_time
            print(self.last_time_displayed)

Ale nie zadowala mnie to bo gra sie przycina na ta jedna sekunde. Jakis inny pomysl jak to rozwiazac? Zalezy mi na tym by raz na 10 sekund przez 1s pokazywala sie animacja.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
1

Tak samo jak zrobiłeś 10 sekund.

Kopiuj
    def update(self,surface):
        self.current_time = time.time()
        if self.current_time - self.last_time_displayed >= 10:
            surface.blit(self.animation_frames[self.animation_frame], (self.rect.x - 32, self.rect.y - 32))

            if self.current_time - self.last_time_displayed >= 11: # zamiast pygame.time.delay(1000)
                self.last_time_displayed = self.current_time

Jakbyś pisał w Unity 3D to mógłbyś taki pygame.time.delay(1000) zrobić za pomocą Coroutine i nie robiłoby to pauzy..
https://docs.unity3d.com/ScriptReference/WaitForSeconds.html

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Nie możesz podmieniać: self.last_time_displayed = self.current_time
Ponieważ trochę czasu minęło.
Nie możesz spać w wątku: pygame.time.delay(1000)
Ponieważ zatrzymujesz na 1sek process co ma działać co 10ms.
update ma być wołany co najmniej w cyklu 3ms oraz:

Kopiuj
if self.last_time_displayed + 10 <= time.time():
  self.last_time_displayed+=10
  ...
ON
  • Rejestracja: dni
  • Ostatnio: dni
1

Dzieki spine. Nie myslalem w tym kierunku xd.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.