根据y值升序或降序更改collisionBitMask

时间:2016-05-09 12:35:22

标签: swift sprite-kit

Swift - SpriteKit

我正在制作我的第一个游戏,我有var Player = SKSpriteNode() 还有var platform = SKNode()

我想检测玩家在y方向上的增加,这样我就可以关闭collisionBitMask。因此,跳跃时和跳下时可以跳过平台,他将降落在平台上。

所以我可以有类似的东西:

if player.position.y = increasing {
 Player.physicsBody?.collisionBitMask = nil
}else{
 Player.physicsBody?.collisionBitMask = PhysicsCategory.Platform
}

我环顾四周,找不到我想要的东西,除非我在寻找错误的东西。

非常感谢。

编辑:已解决检查EmilioPelaez回答,只是说明我在这里稍微改了一下。

使用我所有其他变量在函数外声明var lastY: CGFloat?

override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
        // Checking y direction
            if Player.position.y > lastY {
                // Player increasing in y direction
                Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground
            } else {
                // Player decreasing in y direction
                Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground | PhysicsCategory.Platform
            }

        lastY = Player.position.y
}

1 个答案:

答案 0 :(得分:1)

基本上,您要做的是将当前值与前一帧中的值进行比较。

最简单的方法是创建一个变量,您可以在其中存储以前的值,并使用它来进行比较。完成比较后,将当前值存储在该变量中,以便在下一帧使用。

这样的事情:

var lastY: CGFloat?

// in your function
if let lastY = lastY {
  if player.y > lastY {
    // player.y is increasing
  } else {
    // player.y is decreasing
  }
}
lastY = player.y