无法检测十字准线何时与目标发生碰撞

时间:2016-04-17 16:01:59

标签: python pygame

pygame新手。需要有冲突的建议

我试图做一个简单的pygame,目标在屏幕上移动,用户的控件是十字准线。您可以使用鼠标在屏幕上自由移动十字准线,当您点击它时会发出枪声,就好像您正在拍摄目标一样。但是,我在检测与两者的碰撞方面遇到了麻烦。

if ammo > 0:
            if event.type == pygame.MOUSEBUTTONDOWN:
                gunshot.play()
                ammo -= 1
                print(ammo)
                if x == range(target_x,target_x+60) and y == range(target_y,target_y+60):
                    print('hit!')
                else:
                    print('miss!')

这是我的代码的预览,在制作枪,射击的功能内。如果鼠标的x值等于目标x值的范围,则为目标x值+ 60,因为它是60x60图像。同样的事情发生在两者的y值上。该范围不起作用,但我不知道如何检测十字准线是否在目标的矩形值

1 个答案:

答案 0 :(得分:0)

如果[x,y]对应于鼠标的坐标。然后xy只是整数而非范围,因此您需要将==更改为in。您正在检查某些范围内的x 是否} 某个范围内。这种方式也更清晰易读,因为代码

y

读为

if x in range(x_target,x_target + 60)\
    and y in range(y_target, y_target + 60):

为了进一步提高可读性,您可以:

If mouse is in (on) target?

甚至可能更好地创建单独的函数/方法。

import itertools

x_target_range = range(x_target, x_target + 60)
y_target_range = range(y_target, y_target + 60)
if (x,y) in itertools.product(x_target_range, y_target_range):
    # do stuff

课程的实施取决于您的数据表示。