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
}
答案 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