如何在矩形中制作镜头影响只输出一个事件?

时间:2012-06-09 17:57:20

标签: python pygame

在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 

3 个答案:

答案 0 :(得分:1)

获得积分后,您需要{for for循环中的break

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.

答案 1 :(得分:1)

我猜你发布的循环在主循环中运行,并在主循环的每次迭代中调用。

你应该从shot列表中删除shots,因为它会在主循环的下一次迭代中再次检查碰撞。

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

答案 2 :(得分: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