индекс пикселя вне допустимого диапазона: змеиная игра

Я пытаюсь закодировать игру со змеями и использовать столкновение, чтобы заставить змею есть еду. ну, у меня ошибка, как говорится, есть

index error: pixel index our of range

Вот некоторый код, который может помочь показать проблему.

collision_colour = YELLOW
colour = screen.get_at((400,300))

if dx > 0:
        collision_x = playerRect.right + 1
        collision_y = playerRect.centery
        collision_colour = screen.get_at((collision_x,collision_y))

elif dx < 0:
        collision_x = playerRect.left - 1
        collision_y = playerRect.centery
        collision_colour = screen.get_at((collision_x,collision_y))
elif dy > 0:
        collision_x = playerRect.bottom + 1
        collision_y = playerRect.centerx
        collision_colour = screen.get_at((collision_x,collision_y))
elif dy < 0:
        collision_x = playerRect.top - 1
        collision_y = playerRect.centerx
        collision_colour = screen.get_at((collision_x,collision_y))

if collision_colour == BLUE:
        screen.fill(BLACK)
        startX = screenCentreX
        startY = screenCentreY
        dx = 0
        dy = 0
        main = False
        gameover = True
        elapsedTime = int(time.perf_counter() - startTime)

person i'm sorry    schedule 26.04.2020    source источник
comment
В какой строке ошибка? Вероятно, это означает, что один из параметров get_at() меньше 0 или больше размера вашего экрана.   -  person KTibow    schedule 26.04.2020
comment
Вы должны убедиться, что 0 <= collision_x < screen.get_width() и 0 <= collision_y < screen.get_height()   -  person Rabbid76    schedule 26.04.2020
comment
В настоящее время мой экран (800 600), насколько меньше или больше вы рекомендуете. Потому что я пытался удвоить его и добавить несколько сотен, но это не имело значения.   -  person i'm sorry    schedule 26.04.2020


Ответы (1)


Вы должны убедиться, что координаты пикселей находятся в диапазоне Surface, когда вы вызываете set_at(). Убедитесь, что 0 <= collision_x < screen.get_width() и 0 <= collision_y < screen.get_height():

collision_colour = YELLOW
if dx != 0 or dy != 0:
    collision_colour = BLUE

if dx > 0 and playerRect.right + 1 + 1 < screen.get_width():
    collision_x = playerRect.right + 1
    collision_y = playerRect.centery
    collision_colour = screen.get_at((collision_x, collision_y))
elif dx < 0 and playerRect.left - 1 >= 0
    collision_x = playerRect.left - 1
    collision_y = playerRect.centery
    collision_colour = screen.get_at((collision_x, collision_y))
elif dy > 0 and playerRect.bottom + 1 < screen.get_height():
    collision_x = playerRect.bottom + 1
    collision_y = playerRect.centerx
    collision_colour = screen.get_at((collision_x, collision_y))
elif dy < 0 and playerRect.top - 1 >= 0
    collision_x = playerRect.top - 1
    collision_y = playerRect.centerx
    collision_colour = screen.get_at((collision_x, collision_y))

if collision_colour == BLUE:
    dx = 0
    dy = 0
    # [...]
person Rabbid76    schedule 18.12.2020