Я прошел начальный курс по информатике, но некоторое время назад решил попробовать создать игру.У меня проблема с обнаружением столкновений.Моя идея состояла в том, чтобы переместить объект, и, если есть столкновение, переместите его назад, как он пришел, пока не прекратится столкновение.Вот мой код:
class Player(object):
...
def move(self):
#at this point, velocity = some linear combination of (5, 0)and (0, 5)
#gPos and velocity are types Vector2
self.hitBox = Rect(self.gPos.x, self.gPos.y, 40, 40)
self.gPos += self.velocity
while CheckCollisions(self):
self.gPos -= self.velocity/n #see footnote
self.hitBox = Rect(self.gPos.x, self.gPos.y, 40, 40)
...
def CheckCollisions(obj):
#archList holds all 'architecture' objects, solid == True means you can't walk
#through it. colliderect checks to see if the rectangles are overlapping
for i in archList:
if i.solid:
if i.hitBox.colliderect(obj.hitBox):
return True
return False
* Я подставил несколько разных значений для n, как целых чисел, так и чисел с плавающей точкой, чтобы изменить приращение, на которое игрок возвращается.Я подумал, что при попытке большого поплавка он будет перемещаться только на один пиксель за раз
Когда я запускаю программу, спрайт для плеера очень быстро вибрирует в диапазоне около 5 пикселей, когда я сталкиваюсь со стеной,Если я отпущу клавишу со стрелкой, спрайт навсегда застрянет в стене.Мне интересно, почему спрайт в первую очередь находится внутри стены, так как к тому времени, когда я перевожу спрайт на экран, он должен был быть перемещен прямо за стену.
Что-то не так с моим методом, или проблема заключается в моем исполнении?