python pygame物理矩形圆碰撞

2024-06-09 05:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

同样,这个问题是关于PyParticles4的。
Link to last question for reference

如果不清楚请评论。。。在

我正在做一个射击游戏,很像this,但是在一个平地上,墙的高度在每一个转弯处都会变化(这是游戏中的乐趣),有两个玩家,每个人都有一个可以移动一定距离的大炮(有限制,而且他们不能移动超过一定数量从他们的开始位置)在每个回合(球员决定他是否想移动)。在

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

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

我的问题

子弹与枪手相撞。有什么办法知道子弹什么时候和矩形物体相撞吗?
有人建议我观察矩形边缘上的所有点,看看它是否在圆内,但它似乎很慢。
我觉得更快的东西会更好。


更新:
圆周围可以有一个矩形,如果与矩形相撞,我现在知道矩形何时接近圆,甚至可能会碰到它。。我该如何前进??(Thx对PygameNerd)


Tags: toposself游戏addedforsizedef
3条回答

你可以用直线碰撞点用矩形的中心做更大的圆

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

每次colliderect返回true时,都可以运行另一个测试。对于这个测试有几个选项。一个是类似于你已经收到的建议,但与墙和圈切换。用^{}检查圆周长上的点,看其中一个是否与墙相撞。在pygame中,您可以通过从圆曲面创建一个^{}并运行^{}来获得周长点的列表。你可能不需要每一分,所以你可以得到每一分。实际上,您可能只需要圆矩形边的中点,这可以从Rect对象本身获得。在

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

我不知道你的问题是什么意思,但我认为你需要colliderect函数。在

rect.colliderect(rect): Return bool

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

相关问题 更多 >