My animated SKSprite nodes atlas won't change during touchBegan

33 Views Asked by At

I created a sprite with an animated texture atlas. I then want that animation to change based on the direction the sprite is heading. I try to do so with "self.player!.texture = firstFrametexture(ofatlas)"

Here is where I build the player (put inside didMove but the animation starts without having to move?)

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!)
}

Here is where I animate the player

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

Here is where I try to change the animation. Everything works, the if statement are correctly executed. Just nothing changes

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

    }
}
0

There are 0 best solutions below