2017-06-23 63 views
0

我想做经典的街机游戏打砖块,但我遇到了球和砖之间的碰撞问题。目前,我只是用(在乒乓等)的经典碰撞:pygame中的一个球和一个矩形之间的碰撞

def colision(self, objetivo): 
    if self.rect.colliderect(objetivo.rect): 
     self.speed[1] = -self.speed[1] 

def colision2(self, objetivo): 
    if self.rect.colliderect(objetivo.rect): 
     self.speed[0] = -self.speed[0] 

我的问题是,当球击中砖的不同部位,有时反弹走错了路,并最终“吃”比砖更多。我使用了两种不同类型的碰撞,因为我添加了边框,并且我也使它与它们反弹,但是我不知道如何让程序知道哪一面被撞击,并使用colision1colision2,具体取决于侧。

+0

只需在砖的两侧添加一个标识符,然后检查碰撞是垂直还是水平。或者,如果您实施适当的2D碰撞模型,则无需关心碰撞的方向。 – xvan

+0

你能告诉我一个如何添加标识符和检查的例子吗?还有,我可以制作一个合适的二维碰撞模型吗? –

回答

0

你在使用/画圆形球吗?如果是这样,问题可能是因为你使用碰撞。当球接近砖块时,边框碰撞的位置与其出现的位置稍有不同。尝试使用精灵和collide_circle。

+0

我正在使用圆形球的图像。但是,即时通讯使用colliderect。事情是,我不知道如何使用碰撞圆,因为碰撞是在圆和矩形之间。你能告诉我一个例子吗? –

+0

我会首先使用方形精灵而不是圆来运行程序,以验证它是导致问题的边界框。如果确认,并且想要像素完美的碰撞,则可以为所有精灵创建一个遮罩,并使用sprite.collide_mask()。另一种选择是继续使用矩形碰撞,但每次碰撞时使用几何来测量从球的中心到砖的角的距离。这会告诉你球是否接触到砖块,或者它只是碰撞边界框的角落。 – DinosauRuss