Na ekranie jest czerwony kwadrat, którym można sterować z poziomu klawiatury i cztery statyczne prostokąty. Chcę, aby ruch kwadratu przez prostokąt był blokowany.
W kodzie jaki do tej pory zrobiłem wszystko działa tak jak trzeba, ale tylko dla przypadku w którym user trzyma jedną strzałkę. Jeśli zdecyduje się na ruch ukośny wtedy ujawnia się bug. Wiem czemu tak jest z resztą po samym kodzie łatwo to wywnioskować, ale mimo to nie mam pojęcia jak wypada tę sytuację rozwiązać. Chętnie wysłucham radę.
Poniższy kod uruchamia się w momencie zderzenia dynamicznego obiektu(self), z statycznym obiektem(item).
def on_hit(self, item):
if Direction.Up in self.directions:
self.y = item.y + item.height
elif Direction.Down in self.directions:
self.y = item.y - self.height
if Direction.Left in self.directions:
self.x = item.x + item.width
elif Direction.Right in self.directions:
self.x = item.x - self.width
Natomiast poniższy fragment ukazuje w jak określam self.directions.
def update_(self, delta_time, keyboard):
self.directions = []
if keyboard.get(Qt.Key_Right, False):
self.x += delta_time * self.v
self.directions.append(Direction.Right)
elif keyboard.get(Qt.Key_Left, False):
self.x -= delta_time * self.v
self.directions.append(Direction.Left)
if keyboard.get(Qt.Key_Down, False):
self.y += delta_time * self.v
self.directions.append(Direction.Down)
elif keyboard.get(Qt.Key_Up, False):
self.y -= delta_time * self.v
self.directions.append(Direction.Up)