【问题标题】:How can I check a sprites position on the x axis during update如何在更新期间检查 x 轴上的精灵位置
【发布时间】:2020-06-07 01:32:16
【问题描述】:

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

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

 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


    【解决方案1】:

    速度是一个向量,向量有方向但没有自然顺序。如果您只对 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
    } ...
    

    【讨论】:

    • 你的英雄,感谢您的补充说明/解释
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多