Skocz do zawartości
Pecet256

[Python] Problem z colliderect z Pygame

Rekomendowane odpowiedzi

Dzień dobry

 

Mam problem z instrukcją colliderect z modułu pygame

 

Tworzę grę 2d gdzie użytkownik leci śmigłowcem przez jaskinie generowaną jako prostokąty.

Gdy śmigłowiec zderza się z podłogą lub sklepieniem jaskini to powinna się zmienić zmienna copokazuje z wartości rozgrywka na wartość koniec

 

Niestety nie potrafię zmusić do poprawnego działania instrukcji collidrect

 

Oto klasa przeszkód i funkcja kolizji (na dole)

 

class Przeszkoda():
   def __init__(self, x,szerokosc):
       self.x = x
       self.szerokosc = szerokosc
       self.y_gora=0
       self.wys_gora = random.randint(150,250)
       self.odstep = 200
       self.y_dol = self.wys_gora+self.odstep
       self.wys_dol = wys - self.y_dol
       self.kolor = (160,140,190)
       self.ksztalt_gora = pygame.Rect(self.x, self.y_gora, self.szerokosc, self.wys_gora)
       self.ksztalt_dol = pygame.Rect(self.x, self.y_dol, self.szerokosc, self.wys_dol)
   def rysuj(self):
       pygame.draw.rect(screen, self.kolor, self.ksztalt_gora,0)
       pygame.draw.rect(screen, self.kolor, self.ksztalt_dol,0)
   def ruch(self, v):
       self.x = self.x-v
       self.ksztalt_gora = pygame.Rect(self.x, self.y_gora, self.szerokosc, self.wys_gora)
       self.ksztalt_dol = pygame.Rect(self.x, self.y_dol, self.szerokosc, self.wys_dol)
   def kolizja(self,player):
       if self.ksztalt_gora.colliderect(player) or self.ksztalt_dol.colliderect(player):
           return True
       else:
           return False

 

Oto kod śmigłowca

 

class Helikopter():
   def __init__(self, x, y):
       self.x = x
       self.y = y
       self.wysokosc = 30
       self.szerokosc = 50
       self.ksztalt = pygame.Rect(self.x, self.y, self.szerokosc, self.wysokosc)
       self.grafika = pygame.image.load(os.path.join('kopter.png'))
   def rysuj(self):
       screen.blit(self.grafika, (self.x,self.y))
   def ruch(self,v):
       self.y = self.y+v

 

a to jest if, który ma zmieniać wartość zmiennej copokazuje

 

if p.kolizja(gracz.ksztalt)==True:
               copokazuje = "koniec"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

[Przepraszam za podwójny wspis]

Bardzo proszę o szybką odpowiedź. W skrócie chodzi o to, że colliderect nie wykrywa uderzenia śmigłowca w przeszkodę. W razie potrzeby mogę wkleić więcej kodu programu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wrzuć do konsoli współrzędne elementów i porównaj czy faktycznie prostokąty na siebie nachodzą.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...