2016-04-18 15 views
1

テクスチャの配列を使用してSKSpriteNodeをアニメーション化しています。クリックすると、実行中のACTUALテクスチャに応じて別のアニメーションを設定する必要があります例:0〜5のテクスチャでアニメーションを作成する場合は、texture2が表示されている瞬間をクリックします。テクスチャが表示されている(texture2)かどうかを確認してからアニメーションコレスポンダー(animation2)を実行します。クリック時にSKSpriteNodeが実行しているSKTextureを確認する方法

テクスチャの名前のようなもの

私はこの比較はうまくいかないと知っていますが、ここでは同様のウォークスルーの例があります:

if(knightNode?.texture == SKTexture.init(imageNamed: "knightRunning01")){ 
         knight?.removeActionForKey("walkAnimation") 
         knight?.runAction(SKAction.animateWithTextures(attackingFrames[0], timePerFrame: 0.4)) 
         print("done") 
    }else if(knightNode?.texture == SKTexture.init(imageNamed: "knightRunning02")){ 
         knight?.removeActionForKey("walkAnimation") 
         knight?.runAction(SKAction.animateWithTextures(attackingFrames[1], timePerFrame: 0.4)) 
         print("done2") 
    }else{ 
         print("hehe") 
    } 

私の英語のために申し訳ありません。

答えて

1

いいえSKTextureには名前という名前のパブリックプロパティはありません。また、拡張子を使ってidという名前のストアドプロパティを追加することはできません(ハッキングはありません)。 サブクラスSKTextureできませんその新しいサブクラスに格納されたプロパティを追加します。これは、ドキュメントからです:

サブクラスノート

このクラスは、サブクラス化することはできません。

これは決して試したことはありませんが、可能であれば、どのように問題が起きるかは想像できます(明らかにドキュメントによるとは限りません)。

だから、解決策...あなたは、アレイ内のすべてのテクスチャを保存することができ、このように、現在のテクスチャの指標であるかを調べるために、後でそれを使用します。

import SpriteKit 

class GameScene: SKScene{ 

    var textures:[SKTexture] = [] 
    var sprite:SKSpriteNode! 

    override func didMoveToView(view: SKView) { 

     let atlas = SKTextureAtlas(named: "yourAtlasName") 

     for i in 0...9 { textures.append(atlas.textureNamed(String(i))) } 

     sprite = SKSpriteNode(texture: textures[0]) 
     sprite.position = CGPoint(x: frame.midX, y: frame.midY) 
     addChild(sprite) 

     let animation = SKAction.animateWithTextures(textures, timePerFrame: 2) 
     let loop = SKAction.repeatActionForever(animation) 

     sprite.runAction(loop, withKey: "aKey") 

    } 

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

     if let currentTexture = sprite.texture { 

      if let index = textures.indexOf(currentTexture) { 
       print("Index \(index)") 
      } 
     } 
    } 
} 

はおそらくにいくつかのより多くの方法がありますこれを達成する。

+0

ありがとう、私はそれを行う別の方法が期待されていましたが、これは今のところ行います。再度ありがとう= D。 –

関連する問題