【问题标题】:How do i restrict the players movement without stopping them from moving entirely我如何在不完全阻止他们移动的情况下限制玩家的移动
【发布时间】:2017-09-10 07:57:47
【问题描述】:

我正在尝试在 pygame 中进行一些基本的碰撞检测,到目前为止我已经设置好了,所以如果一个精灵与另一个精灵接触它们都会停止,我想知道的是我的玩家是否击中了精灵我该怎么做允许它在 sprite 中更远的地方以外的任何其他方式。

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

【问题讨论】:

标签: python pygame


【解决方案1】:

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

希望这有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多