下午好,我想问一下我在游戏中遇到的这个错误。我在pygame做一个简单的游戏,但我无法发现为什么我有这个错误。我将打印相关代码:
bottomX=-1000
bottomY=300
FishList = []
NumFish=0
while NumFish<20:
xfish=random.randrange(5,2550)
yfish=random.randrange(20,150)
IsInWater=(bottom.get_at([xFish+5,yFish+7])== (80,86,210,255))
if IsInWater:
FishList.append([xFish,yFish])
NumFish= NumFish + 1
for i in range(len(FishList)):
[xFish,yFish] = FishList[i]
mXp = random.randrange(-5,5) #Move in X
mYp = random.randrange(-5,6) #Move in y
FishStillInWater = (xFish+mXp+5>0 and xFish+mXp+5<3000 and yFish+mYp+7>10 and yFish+mYp+7 < 200 and (fundo.get_at([xFish+mXp+5,yFish+mYp+7])== (80,86,210,255)))
if FishStillInWater:
# If in water, moves
FishList[i][0] = xFish + mXp
FishList[i][1] = yGish + mYp
pygame.draw.rect(screen,red,[bottomX + FishList[i][0],300 + FishList[i][1],15,10],0)
for x in range(-7,7):
for y in range(-5,5):
FishDies=screen.get_at([bottomX + FishList[i][0]+x,300 + FishList[i][1]+y])==(0,0,0,255)# 0,0,0,255 is the color of the "bullets"
if FishDies:
yFish = 10000
points= points + 5
错误是:
FishDies = screen.get_at([bottomX + FishList [i] [0] + x,300 + FishList [i] [1] + y])==(0,0,0,255) IndexError:像素索引超出范围
对于你们这些时间的人们,希望你们可以帮助我,如果你需要其他任何东西来理解代码告诉我plz
答案 0 :(得分:0)
让我们分解一下。
错误在于,您想要访问不在表面上的像素。这是你的计算:
最小的鱼坐标如下:(5,20),而最大的是(2550,150)。
然后,您想要检查像素的颜色,但鱼可能已经移出屏幕,或者只有一部分移动了。
我建议使用普通collide_rect
检查是否有子弹碰撞。关于如何做到这一点有很多例子。