Nie działa metoda klasy, korzystająca z atrybutu klasy

0

Witam, robię grę "Pacman" z użyciem pygame. Stwierdziłem, że ścianki najlepiej będzie zbudować z cegiełek w postaci obiektów, tak żeby nie kopiować dla każdej takiej cegiełki z osobna warunków, uniemożliwiających Pacmanowi przenikanie przez cegiełki. Warunki działają poprawnie, gdy to robię bez klas, wygląda to wtedy tak:

 if (pac_x + pac_szer) > des_x and pac_y < (des_y + des_wys) and (pac_y + pac_szer) > des_y and (pac_x + pac_szer) < (des_x +5):
         pac_x = des_x - pac_szer

     if pac_x < (des_x + des_szer) and pac_y < (des_y + des_wys) and (pac_y + pac_szer) > des_y and pac_x > (des_x + des_szer - 5):
         pac_x = des_x + des_szer

     if pac_y < (des_y + des_wys) and (pac_x + pac_szer) > des_x and pac_x < (des_x + des_szer) and pac_y > (des_y + des_wys - 5):
         pac_y = (des_y + des_wys)

     if (pac_y + pac_szer) > des_y and (pac_x + pac_szer) > des_x and pac_x < (des_x + des_szer) and (pac_y + pac_szer) < (des_y + 5):
         pac_y = des_y - pac_szer

pac to pakman, a des to deska/cegiełka

Ale kiedy zastosuję metodę obiektu, to już nie działa (nie wyskakuje żaden błąd, ale Pacman przenika przez ściankę. Klasa wygląda w tej chwili tak:

class Decha:
    def __init__(self, x, y, szer, wys):
        self.x = x
        self.y = y
        self.szer = szer
        self.wys = wys

    def wstaw(self, x, y):
        screen.blit(des,(x,y))

    def blokada(self, pac_x, pac_y):
        if (pac_x + pac_szer) > self.x and pac_y < (self.y + self.wys) and (pac_y + pac_szer) > self.y and (pac_x + pac_szer) < (self.x +5):
            pac_x = self.x - self.szer
            return pac_x, pac_y
        if pac_x < (self.x + self.szer) and pac_y < (self.y + self.wys) and (pac_y + pac_szer) > self.y and pac_x > (self.x + self.szer - 5):
            pac_x = self.x + self.szer
            return pac_x, pac_y
        if pac_y < (self.y + self.wys) and (pac_x + pac_szer) > self.x and pac_x < (self.x + self.szer) and pac_y > (self.y + self.wys - 5):
            pac_y = (self.y + self.wys)
            return pac_x, pac_y
        if (pac_y + pac_szer) > self.y and (pac_x + pac_szer) > self.x and pac_x < (self.x + self.szer) and (pac_y + pac_szer) < (self.y + 5):
            pac_y = self.y - pac_szer
            return pac_x, pac_y

Czy wie ktoś na czym polega problem? Oczywiście wywołuję tę metodę w odpowiednim miejscu:

deska1.blokada(pac_x,pac_y)

Była też wersja z jednym return pac_x, pac_y oraz bez returna

0

Już wiem, powinno być tak:

pac_x, pac_y = deska1.blokada(pac_x,pac_y)

Takie malutkie niedopatrzenie, a wszystko się psuje...

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