像素索引超出范围:蛇游戏

时间:2020-04-26 18:17:29

标签: python pygame collision

我正在尝试编写蛇游戏,并使用碰撞使蛇吃掉食物。好吧,我在说

时出错
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)

1 个答案:

答案 0 :(得分:0)

调用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
    # [...]