根据速度更改 swift SKSprite 节点动画

Change swift SKSprite node animation based on velocity

提问人:Mugs 提问时间:6/7/2020 更新时间:6/7/2020 访问量:59

问:

类型“SKSpriteNode”的值没有成员“velocity”

我想根据我的 SKSprite 节点的速度更改动画,但我收到上面显示的错误,我不确定为什么

覆盖 func touchesBegan(_ touches: Set, with event: UIEvent?){ super.touchesBegan(touches,带有:事件)

    if let location = touches.first?.location(in: self) {
    let horizontalAction = SKAction.move(to: location, duration: 1.0)
        horizontalAction.timingMode = SKActionTimingMode.easeOut
      player?.run(horizontalAction)

        let playerAnimatedAtlas = SKTextureAtlas(named: "animation")
             var walkFrames: [SKTexture] = []
               var lwalkFrames: [SKTexture] = []


             let numImages = playerAnimatedAtlas.textureNames.count
             for i in 1...numImages {
               let playerTextureName = "player\(i)"
               let playerLeftTextureName = "lplayer\(i)"
               walkFrames.append(playerAnimatedAtlas.textureNamed(playerTextureName))
               lwalkFrames.append(playerAnimatedAtlas.textureNamed(playerLeftTextureName))
             }
             walkingPlayer = walkFrames
             lwalkingPlayer = lwalkFrames

               let leftFrameTexture = lwalkingPlayer[0]
               let firstFrameTexture = walkingPlayer[0]

        player!.physicsBody?.isDynamic = true

        player!.physicsBody = SKPhysicsBody(texture: firstFrameTexture,
                   size: player!.texture!.size())

        if player!.velocity.dx < 0 {
 //ERROR: Value of type 'SKSpriteNode' has no member 'velocity' ****
            player! = SKSpriteNode(texture: leftFrameTexture)
        }

        else if player!.velocity.dx > 0 {
//ERROR: Value of type 'SKSpriteNode' has no member 'velocity' ****
            player! = SKSpriteNode(texture: firstFrameTexture)
        }

    }
}
ios swift ios7 精灵套件 skspritenode

评论


答:

1赞 Lou Franco 6/7/2020 #1

尝试player!.physicsBody.velocity

(我知道这不是你的问题,但最终尽量不需要无处不在的 - 使用和!if letguard let)

评论

0赞 Mugs 6/7/2020
你回答了我的具体问题,谢谢!但是现在我收到另一个错误,即“在'BinaryInteger'上引用运算符函数'>'要求'CGVector'符合'BinaryInteger'”,只要有机会,你就可以帮忙了
0赞 Mugs 6/7/2020
是的,我真的是 Swift 的新手,大约一周前我才开始学习。我想我明白了if let的概念,但它的代码要多得多,我不确定我是否理解为什么它更好
0赞 Mugs 6/7/2020
我不想继续创建一堆新的 let 变量,对吧?此外,我的一些代码需要一个可选的,例如 im 将相机添加到播放器精灵节点。
0赞 Lou Franco 6/7/2020
每次使用 时,您都是在说您知道变量不是 nil。如果你错了,你的应用程序将崩溃。使用 guard let 让你检查它是否为 nil,如果是,则停止执行其余的函数。!
0赞 Lou Franco 6/7/2020
Vector 不支持 -- 这到底意味着什么?您可能想比较向量的大小(请参阅>hypot())