2016-08-02 4 views
0

ゲームを作成していて、キャラクターにアニメーションを実行しようとしています。アニメーションは、30フレームが30fpsで実行されています。アニメーションはうまく動作しますが、歩いているときにアニメーションをループするのに問題があります。しかし、ヒーローの動きにリンクされたボタンを作成しましたが、現在のコーディングでボタンを押したままにするとアニメーションは最初のフレームだけをループし、完全なアニメーションが再生されます。私はSKwaitFordurationアクションを実装しようとしましたが、どちらもうまくいきませんでしたが、今はかなり困惑しています。すべてのヘルプは、私はアニメーションスプライトキットのアニメーションをオン/オフに切り替える方法

ここ

私soldierLegsクラスであると非常に新しいです笑良い助けです

import Foundation 
import SpriteKit 


class AssassinLegs: SKSpriteNode { 

let soldierLegs = SKSpriteNode(imageNamed: "RZ-AssassinLegs.png") 
var runAction:SKAction? 

var isJumping:Bool = false 
var isFalling:Bool = false 
var isRunning:Bool = true 
var isAttacking:Bool = false 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

init (imageNamed:String) { 

    let imageTexture = SKTexture(imageNamed: imageNamed) 
    super.init(texture: imageTexture, color:SKColor.clearColor(), size: 
    imageTexture.size()) 
    self.setUpRun() 
} 

func setUpRun() { 

    let atlas = SKTextureAtlas (named: "RzAssassinLegs") 

    var array = [String]() 

    //or setup an array with exactly the sequential frames start from 1 
    //was 
    // for var i=1; i <= 12; i++ { 

    for i in 1 ... 30 { 

     let nameString = String(format: "RzAssassinRun%i", i) 
     array.append(nameString) 

    } 
    //create another array this time with SKTexture as the type 
    (textures being the .png images) 
    var atlasTextures:[SKTexture] = [] 

    //was... 
    //for (var i = 0; i < array.count; i++) { 

    for i in 0 ..< array.count { 

     let texture:SKTexture = atlas.textureNamed(array[i]) 
     atlasTextures.insert(texture, atIndex:i) 
    } 

    let atlasAnimation = SKAction.animateWithTextures(atlasTextures,  
    timePerFrame: 1.0/30, resize: true , restore:false) 

    runAction = SKAction.repeatActionForever(atlasAnimation) 

    // runAction = SKAction 

} 

func Run(){ 

    isFalling = false 
    isRunning = true 
    isJumping = false 

    let runAnimationFinish = SKAction.waitForDuration(1) 
    let runAnimationSequence = SKAction.sequence([runAction!, 
    runAnimationFinish]) 
    self.runAction(runAnimationSequence) 

} 

class GameScene: SKScene, SKPhysicsContactDelegate { 

     func RightArrow() { 
    rightArrow.position = CGPointMake(101, 33) 
    rightArrow.size = CGSize (width: 50, height: 50) 
    rightArrow.xScale = 1 
    rightArrow.yScale = 1 
    rightArrow.zPosition = 1 

    self.addChild(rightArrow) 
} 

func heroMovementRight() { 
    soldierLegs.Run() 

    soldierLegs.position = CGPointMake(soldierLegs.position.x + 4.0, 
    soldierLegs.position.y) 
    soldierTorso.position = CGPointMake(soldierTorso.position.x + 4.0, 
    soldierTorso.position.y) 
} 
     override func touchesBegan(touches: Set<UITouch>, withEvent 
     event:UIEvent?) { 

    for touch in touches { 

     let location = touch.locationInNode(self) 
     let node = nodeAtPoint(location) 
      if stickActive == false{ fireWeapon = false} 
     if node == jumpArrow { if (canJump) {heroJumpMovement() } } 
     if node == leftArrow {goLeft = true} 
     if node == rightArrow {goRight = true} 

     } 
    override func touchesEnded(touches: Set<UITouch>, withEvent event: 
    UIEvent?) { 

    goLeft = false 
    goRight = false 
    fireWeapon = false 
    stickActive = false 
} 
    override func update(currentTime: CFTimeInterval) { 

    if goLeft {heroMovementLeft()} 
    if goRight {heroMovementRight()} 
    if heroJump {heroJumpMovement()} 
} 
} 

答えて

0

はアニメーションが原因複数の呼び出しにこだわったようです。例えば

if !self.actionForKeyIsRunning("rotate") { 
      let rotate = SKAction.rotateToAngle(newAngle, duration: 0.2,shortestUnitArc: true) 
      self.runAction(rotate,withKey: "rotate") 
} 

func actionForKeyIsRunning(key: String) -> Bool { 
     return self.actionForKey(key) != nil ? true : false 
} 
あなたのアニメーションをチェックすることができ 毎回、複数の担当者があります
関連する問題