1

在 pygame 中,我试图让每次射击击中我的僵尸时我的积分增加 1000,僵尸的位置是 zhot[XX] 和 zhot[YY]。我试图通过在我的僵尸周围创建一个矩形并使用碰撞点功能来实现这一点,但是当我的镜头穿过矩形时,它的位置的每次变化都计为 1000 点,所以射击一个僵尸会给我大约 30000 点。我怎样才能解决这个问题?

for shot in shots:
    zomrect2=Rect(zhot[XX],zhot[YY],49,38)
    if zomrect2.collidepoint(shot[X],shot[Y]):     
        points+=1000 
4

3 回答 3

1

Once you've awarded points, you need to break out of the for loop.

for shot in shots:
    zomrect2=Rect(zhot[XX],zhot[YY],49,38)
    if zomrect2.collidepoint(shot[X],shot[Y]):     
        points+=1000 
        break #no more points will be awarded, there's no point wasting computation checking the rest.
于 2012-06-09T19:28:08.603 回答
1

我猜您发布的循环在您的主循环内运行,并且在主循环的每次迭代中都会被调用。

一旦它击中你的僵尸,你应该shotshots列表中删除它,这样就不会在主循环的下一次迭代中再次检查它是否发生碰撞。

zomrect2=Rect(zhot[XX],zhot[YY],49,38)
# make a copy of the list so we can savely remove items
# from it while iterating over the list
for shot in shots[:]: 
  if zomrect2.collidepoint(shot[X],shot[Y]):     
    points += 1000 
    shots.remove(shot) 
    # and also do whatever you have to do to 
    # erase the shot objects from your game
于 2012-06-10T18:28:16.860 回答
0

您需要跟踪已经获得积分的事实。目前还不清楚如何/何时调用方法或函数奖励积分,但可能是这样的:

points_awarded = False
for shot in shots:
    zomrect2=Rect(zhot[XX],zhot[YY],49,38)
    if zomrect2.collidepoint(shot[X],shot[Y]) and not points_awarded:      
        points_awarded = True
        points+=1000 
于 2012-06-09T18:04:08.870 回答