如何在不阻止玩家完全移动的情况下限制玩家的移动

时间:2017-09-10 07:57:48

标签: python pygame

我正在尝试在pygame中进行一些基本的碰撞检测,到目前为止我设置了所以如果一个精灵与另一个精灵接触他们都停止了,我想知道的是我的玩家是否打到精灵我怎么能允许它在精灵中进一步远离其他方式。

我如何设置它现在我只有一个功能,可以检测它们是否发生碰撞,这会改变一个全局变量,完全禁用运动。

1 个答案:

答案 0 :(得分:0)

Sprite应该有xVelyVel个变量。这些变量将每帧更改xy变量。然后,精灵将在相应的xy变量处绘制到屏幕上。

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,这是另一个问题的概念。

希望这有帮助!