Я пишу довольно простую 2d нисходящую игру типа подземелья на python, используя pygame. Все идет хорошо, кроме столкновения. Прямо сейчас у меня есть система тайловых карт, которая читает лист тайлов, а затем рисует правильное изображение на экране. Я пытаюсь добавить столкновение ко всем изображениям типа «стена», поэтому я создал функцию, которая рисует прямоугольники каждый раз, когда появляется стена, и затем они добавляются в список. Вот моя функция add_collider:
rect_list = []
def add_collider(window, x, y):
rect = pygame.rect = (x*32, y*32, 32, 32)
pygame.draw.rect(window, [255, 0, 0], rect, 1)
rect_list.append(rect)
Затем в моем основном игровом цикле я могу проверить, пересекается ли прямоугольник моего игрока с любым из моих коллайдеров. Это работает отлично, за исключением того, что игра замедляется примерно через 10 секунд после остановки. Я полагаю, это потому, что я пробегаю цикл 30-40 объектов 30 раз в секунду (частота кадров игры). Вот игровой цикл:
while run:
clock.tick(30)
#player.get_collider() returns a rectangle around the player,
#essentially the hitbox of the player
for c in collider.get_collider():
if player.get_collider().colliderect(c):
print('Collide')
#just setting the player's position to 400,400 for now until I figure this out
player.x = 400
player.y = 400
redrawGameWindow()
Должен быть лучший способ. Насколько я знаю, это может быть грамотно неправильным / плохим способом ведения дел. Если мне нужно переделать логику коллизий, это нормально, я просто хочу повысить производительность. Спасибо за любую помощь или советы.