更新期间如何检查 x 轴上的精灵位置

How can I check a sprites position on the x axis during update

我想在不使用物理体的情况下检测精灵移动的方向。

我尝试使用如下所示的物理体:

 if player!.physicsBody!.velocity < 0 {
//Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to 
'BinaryInteger' *****
            player! = SKSpriteNode(texture: leftFrameTexture)
        }

        else if player!.physicsBody!.velocity > 0 {
//Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to 
    'BinaryInteger' *****
            player! = SKSpriteNode(texture: firstFrameTexture)
        }

但出现错误:在 'BinaryInteger' 上引用运算符函数“<”要求 'CGVector' 符合 'BinaryInteger'

一定有更简单的方法。除了速度我不需要任何物理,如果我能告诉精灵运动的方向我就不需要速度

为什么不在更新中检查精灵的 x 位置?

private var timeCheck: Double = 0
private var lastPosX: CGFloat!

override func update(_ currentTime: TimeInterval) {

    if timeCheck == 0 {

        timeCheck = currentTime
        lastPosX = someSprite.position.x
        return
    }

    //check 10 times a second versus 60 
    if currentTime - currentTime > 0.1 {

        let xDif = someSprite.position.x - lastPosX 

        if xDif == 0 {
           //not moving
        }
        else if xDif < 0 {
            //moving left
        }
        else {
            //moving right
        }

        timeCheck = currentTime
        lastPosX = someSprite.position.x
    }

}

速度是一个向量,向量有方向但没有自然顺序。如果您只对 x 轴以及玩家是向左还是向右移动感兴趣,则需要速度的 x 分量:

if player!.physicsBody!.velocity.dx < 0 {
   // Stuff for when the player is moving left
   ...
}

此外,您可能不想像 player! = SKSpriteNode(texture: leftFrameTexture) 那样更改播放器节点,因为您正在丢弃与播放器相关的所有内容,例如物理体、位置、方向、比例等。看起来你只是想改变纹理,所以:

if player!.physicsBody!.velocity.dx < 0 {
   player!.texture = leftFrameTexture
} ...