0

这个问题再次出现在 PyParticles4 上。
链接到最后一个问题以供参考

如果不清楚请评论...

我正在开发一个射击游戏,很像这样,但是在平坦的土地上,墙壁每转一圈都会改变它的高度(游戏中的一些有趣的东西)并且有 2 个玩家,每个玩家都有一个可以移动一段距离的大炮(有一个限制,他们不能从他们的起始位置移动超过一定的量)在每轮(玩家决定他是否想移动)。

到目前为止我的代码(用于子弹和射手)

class Bullet(PyParticles.Particle):
    def hit(self,shooterlist):
        for shoot in shooterlist:
            #confusion
            dist = math.hypot(dx,dy)
    # other funcs to added
class Shooter:
    def __init__(self,pos,size):
        self.rect = pygame.Rect(pos,size)
    # other funcs to added

我的问题

子弹与射手的碰撞。关于如何知道子弹何时与矩形碰撞的任何想法?
有人建议我查看矩形边缘的所有点,看看它是否在圆圈内,但它似乎很慢。
我认为更快的东西会更好..
..
..
更新:
圆圈周围可以有一个矩形,如果与矩形碰撞,我现在知道矩形何时靠近圆圈,甚至可能触摸它.. 如何我要继续前进吗??(感谢 PygameNerd)

4

3 回答 3

1

我不确定您的问题是什么意思,但我认为您需要该colliderect功能。

rect.colliderect(rect): Return bool

把它放在代码中的某个地方,如果它返回真,让球爆炸。

于 2013-01-05T17:58:03.733 回答
1

您可以在每次colliderect返回 true 时运行另一个测试。该测试的内容有几个选项。一个类似于您已经收到的建议,但改变了墙和圈。检查圆圆周上的点,看看其中一个点是否与墙壁碰撞Rect.collidepointMask在 pygame 中,您可以通过从圆形表面创建 a 并运行来获取圆周点列表Mask.outline。你可能不需要每一分,所以你可以只得到第 N 分。事实上,您可能只需要圆的矩形边缘的中点,您可以从Rect对象本身获得。

您要求精确碰撞,这将为您提供圆形和矩形之间的像素完美碰撞检测。不过,您的游戏中可能不需要它,所以我建议colliderect先尝试一下。如果您一般对 pygame 中的碰撞检测感兴趣,有很多选项直接在MaskSprite文档中描述的函数中实现或基于函数实现。

于 2013-01-08T02:26:05.247 回答
0

您可以将 Rect.collidepoint 与圆心一起使用,但使 rect 更大

collide_rect = Rect(x - p.radius,y - p.radius,w + 2 * p.radius,h + 2 * p.radius)
if collide_rect.collide_point(p.pos):
    # Collision Resolution
于 2013-03-27T18:09:10.263 回答