在更新过程中如何检查精灵在x轴上的位置

问题描述 投票:0回答:2

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

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

 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'上引用运算符'

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

ios swift sprite-kit skphysicsbody
2个回答
0
投票

为什么不只检查更新中精灵的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
    }

}

0
投票

速度是一个向量,向量具有方向,但没有自然顺序。如果您只对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
} ...
© www.soinside.com 2019 - 2024. All rights reserved.