Плохая производительность столкновения - PullRequest
0 голосов
/ 17 октября 2019

Я пишу довольно простую 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()

Должен быть лучший способ. Насколько я знаю, это может быть грамотно неправильным / плохим способом ведения дел. Если мне нужно переделать логику коллизий, это нормально, я просто хочу повысить производительность. Спасибо за любую помощь или советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...