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

Ios 更新期间如何检查x轴上的精灵位置,ios,swift,sprite-kit,skphysicsbody,Ios,Swift,Sprite Kit,Skphysicsbody,我想在不使用物理体的情况下检测精灵移动的方向 我尝试使用一个物理实体,如下所示: if player!.physicsBody!.velocity < 0 { //Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to 'BinaryInteger' ***** player! = SKSpriteNode(texture: leftF

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

我尝试使用一个物理实体,如下所示:

 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)
        }
if player!。物理体!。速度<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
    }

}
private-var-timeCheck:Double=0
私有变量lastPosX:CGFloat!
覆盖函数更新(uCurrentTime:TimeInterval){
如果timeCheck==0{
时间检查=当前时间
lastPosX=someSprite.position.x
返回
}
//每秒检查10次,而不是60次
如果currentTime-currentTime>0.1{
设xDif=someSprite.position.x-lastPosX
如果xDif==0{
//不动
}
如果xDif<0,则为else{
//向左移动
}
否则{
//向右移动
}
时间检查=当前时间
lastPosX=someSprite.position.x
}
}

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

}
private-var-timeCheck:Double=0
私有变量lastPosX:CGFloat!
覆盖函数更新(uCurrentTime:TimeInterval){
如果timeCheck==0{
时间检查=当前时间
lastPosX=someSprite.position.x
返回
}
//每秒检查10次,而不是60次
如果currentTime-currentTime>0.1{
设xDif=someSprite.position.x-lastPosX
如果xDif==0{
//不动
}
如果xDif<0,则为else{
//向左移动
}
否则{
//向右移动
}
时间检查=当前时间
lastPosX=someSprite.position.x
}
}

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

if player!.physicsBody!.velocity.dx<0{
//当玩家向左移动时使用的东西
...
}
此外,您可能不想更改播放器节点,如
player!=SKSpriteNode(纹理:leftFrameTexture)
,因为您正在丢弃与播放器相关的所有内容,如物理实体、位置、方向、比例等。看起来您只想更改纹理,因此:

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

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

if player!.physicsBody!.velocity.dx<0{
//当玩家向左移动时使用的东西
...
}
此外,您可能不想更改播放器节点,如
player!=SKSpriteNode(纹理:leftFrameTexture)
,因为您正在丢弃与播放器相关的所有内容,如物理实体、位置、方向、比例等。看起来您只想更改纹理,因此:

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

您的a英雄,感谢添加的澄清/解释您的a英雄,感谢添加的澄清/解释