2016-07-24 8 views
3

私はアイドルプレーヤーのアニメーションを持っています。私はいくつかのアニメーションの間で滑らかな移行をしたいと思います。アイドルアニメーションはデフォルトのアニメーションであり、その遷移から私は別の状態に切り替えることができます(戦いを言いましょう)。アイドルキャラクタアニメーションのためのコードは、現在のようなものです:SpriteKitアニメーション間の適切な遷移

self.addChild(playerAnimation) 
playerAnimation.runAction(SKAction.repeatActionForever(
      SKAction.animateWithTextures(playerAnimationManager.idleManAnimation.textureArray, timePerFrame: 0.1))) 

、これがある(今のところ永遠に行くことを予定されているが、私はそれを傍受し、その上に新しいアニメーションを追加する必要があります新しい状態の同じ文字)。アイドル状態のアニメーションを停止し、新しいアニメーションに切り替えてから終了するとアイドル状態に戻るべきだと思っていましたが、これがアニメーションを連鎖させる最良の方法であるとは確信していません。それについて行ってください。

提案がありますか?ありがとう!

答えて

1

テクスチャ配列の長さによっては、これを行うことができます。

私はobjective Cを使用して、このクラスファイル内の任意のサブルーチンが呼び出されることができますプロパティまたは変数を作るSwift

  1. 初の使い方を見て、コードなしで説明しようとします。 Booleanで、NOに設定する必要があります。それをidleFlagと呼ぶことができます。

  2. 次は、アニメーションを戦闘モードに変更する方法を作成します。この変更は、アイドルアニメーションを削除し、それをファイトアニメーションに置き換えることになります。この方法もidleFlagNOに設定されています。メソッドを呼ぶことにしましょう「beginFightAnim

  3. そして最後に、あなたのrepeatActionForEverアイドルアニメーションで、右のあなたのanimateWithTexturesアニメーションの後、runBlockアニメーションを追加します。このブロックでは、静的変数(ブロック呼び出しの繰り返しで記憶される変数)を定義し、+1でインクリメントし、次のような "if文"を追加します - >if (my_static_var == number_of_frames_in_texture_animations && idleFlag)。そして、0に静的変数を設定し、この後「beginFightAnim

を呼び出す「if文」でアニメーションを変更しなければならないすべてはYESidleFlagに設定されています。

うまくいきますように!

問題が発生した場合は、下記にご意見ください。

+0

確かに合理的な解決策のように聞こえる:

もう一つの良いところは、毎回プレーヤーの状態を知るための体制を構築し、この変数に新しいアクションやアニメーションを起動するたびに変更することです。私はそれを試してみて、それがどのように動作するかを見てみましょう – Spyros

0

この問題を理解しやすくするために、一連の例を挙げたいと思います。あなたのノードがplayerAnimation、あなたが行うことができ、その瞬間に実行されているものをフレーム知るためにリアルタイムでアニメーションを傍受したい場合は、

player-idle1.png 
player-idle2.png 
player-idle3.png 
... 

を持っていたplistを持つ典型的なatlascと呼ばれているとします

override func update(currentTime: CFTimeInterval) { 
    if String(playerAnimation.texture).rangeOfString("player-idle") != nil { 
     print(String(playerAnimation.texture)) 
    } 
} 

この時点で、アクションに「キー」を割り当てた後(withKey:"idleAnimation")、別の次のアニメーションを開始するときに特定のアイドル動作を停止することができます。

enum PlayerStatus: Int { 
    case Idle = 1 
    case Fight = 2 
    case Run = 3 
    case Jump = 4 
    case Die = 5 
    ... 
} 

var currentStatus: PlayerStatus! 
+0

これはあなたのために機能しますか? AnimateWithTexturesイベント中にスプライトからテクスチャを取得しようとすると、元のテクスチャがアニメーション化されずに返されます。私はこれを処理する独自のアクションを作成しました。 – Knight0fDragon

+0

はい、投稿する前に安全にしようとしました。私はあなたのアプリケーションを構築し、atlascを見つけるコンテンツパッケージ内で検索すると、自分のフォルダのatlasで作成したatlascをすべてのフレームで作成しました。私はアニメーションの間にすべてのフレーム名を段階的に見ることができます。今のところ、それについての問題はわかりません –

+0

フレーム名は私が心配していたものではなく、実際に使用していたテクスチャを取得しています。アイドル1、アイドル2、アイドル3などの印刷? – Knight0fDragon

関連する問題