0

我创建了一个带有动画纹理图集的精灵。然后,我希望该动画根据精灵前进的方向而改变。我尝试使用“self.player!.texture = firstFrametexture(ofatlas)”来做到这一点

这是我构建播放器的地方(放在 didMove 中,但动画无需移动即可开始?)

func buildPlayer() {
  let playerAnimatedAtlas = SKTextureAtlas(named: "animation")

  var walkFrames: [SKTexture] = []

  let numImages = playerAnimatedAtlas.textureNames.count
  for i in 1...numImages {
    let playerTextureName = "player\(i)"

    walkFrames.append(playerAnimatedAtlas.textureNamed(playerTextureName))

  }
  walkingPlayer = walkFrames

    let firstFrameTexture = walkingPlayer[0]
    player! = SKSpriteNode(texture: firstFrameTexture)

    player!.position = CGPoint(x: frame.midX, y: frame.midY)
    addChild(player!)
}

这是我为播放器设置动画的地方

func animatePlayer() {
  player!.run(SKAction.repeatForever(
    SKAction.animate(with: walkingPlayer,
                     timePerFrame: 0.5,
                     resize: false,
                     restore: true)),
    withKey:"walkingInPlacePlayer")
}

这是我尝试更改动画的地方一切正常,if 语句正确执行。只是没有任何改变

override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event)

    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")

        let lplayerAnimatedAtlas = SKTextureAtlas(named: "animationleft")
             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(lplayerAnimatedAtlas.textureNamed(playerLeftTextureName))
             }



             walkingPlayer = walkFrames
             lwalkingPlayer = lwalkFrames


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



        if location.x > player!.position.x {
            self.player!.texture = firstFrameTexture
            print("rightsuccess")
        } else if location.x < player!.position.x {
            self.player!.texture = leftFrameTexture
            print("leftsuccess")
        } 

    }
}
4

0 回答 0