我正在尝试在pygame中进行一些基本的碰撞检测,到目前为止我设置了所以如果一个精灵与另一个精灵接触他们都停止了,我想知道的是我的玩家是否打到精灵我怎么能允许它在精灵中进一步远离其他方式。
我如何设置它现在我只有一个功能,可以检测它们是否发生碰撞,这会改变一个全局变量,完全禁用运动。
答案 0 :(得分:0)
Sprite应该有xVel
和yVel
个变量。这些变量将每帧更改x
和y
变量。然后,精灵将在相应的x
和y
变量处绘制到屏幕上。
class Sprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.xVel = 0
self.yVel = 0
self.x = 100
self.y = 100
# Continue method
def update(self):
self.x += xVel
self.y += yVel
# Continue method
这是精灵碰撞处理代码的样子。
if sprite1.yVel == 0 and sprite2.yVel == 0:
# This is when the sprites are not travelling up or down the y axis
sprite1.xVel = -sprite1.xVel
sprite2.xVel = -sprite2.xVel
if sprite1.xVel == 0 and sprite2.xVel == 0:
# This is when the sprites are not travelling left or right on the x
# axis
sprite1.yVel = -sprite1.yVel
sprite2.yVel = -sprite2.yVel
此代码适用于4向移动。将xVel
变量设置为-xVel
会使其向相反方向移动。这同样适用于yVel
变量。只要您使用对象,就不需要更改任何全局变量。
当玩家向左或向右行驶时yVel == 0
。如果玩家上下移动xVel == 0
。
请注意精灵的移动速度会根据帧速率而有所不同。解决这个问题的方法是使用deltatime,这是另一个问题的概念。
希望这有帮助!