我正在尝试编写蛇游戏,并使用碰撞使蛇吃掉食物。好吧,我在说
时出错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)
答案 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
# [...]