我正在制作一个“Breakout”的 Pygame。
我正在使用碰撞,并且想要一种简单的方法来对一个矩形的不同边产生不同的反弹效果。
我目前对球与球棒的碰撞是这样的:
“点”=球;“蝙蝠”=蝙蝠;所以你们都明白。
if dot.rect.colliderect(bat.rect):<br>
dot.dy *= -1
我想要与每一侧相互作用的东西,因此可以在球击中球棒一侧时反转球的 self.dx 值,并且仅在击球顶部时反转 self.dy 值。
谢谢!!!:D
我正在制作一个“Breakout”的 Pygame。
我正在使用碰撞,并且想要一种简单的方法来对一个矩形的不同边产生不同的反弹效果。
我目前对球与球棒的碰撞是这样的:
“点”=球;“蝙蝠”=蝙蝠;所以你们都明白。
if dot.rect.colliderect(bat.rect):<br>
dot.dy *= -1
我想要与每一侧相互作用的东西,因此可以在球击中球棒一侧时反转球的 self.dx 值,并且仅在击球顶部时反转 self.dy 值。
谢谢!!!:D
谢谢!根本没花多少时间。对于其他人,这是我用作指导的代码:
if dot.rect.colliderect(bat.rect): if 570 < dot.rect.centery < 610 and (bat.rect.centerx - 75) < dot.rect.centerx < (bat.rect.centerx + 75): dot .dx *= -1 其他:dot.dy *= -1
效果很好。只有一个问题:对于 Python 碰撞,对象在对碰撞做出反应之前会稍微进入其他对象。因此,您不能将 if 语句的限制设置为精确测量值,因为如果它以这些精确测量值达到顶部,它将触发第一个 if 语句并彻底搞砸。但这非常适合简单。
再次感谢 McWafflestix!:D
您想要的是第二次检查(在 if 内),检查点的 Y 坐标是否与球棒的 Y 坐标相同(即,当球与球棒处于相同高度时,球击中球棒,这意味着它一定是从侧面击中的),然后反转 X 速度;否则,你已经击中了顶部的球棒,所以反转 Y 速度。
这并不完全正确,但这会让你继续前进。