2012-04-12 11 views
1

私はFlexを学び、簡単なRPGを実践しようとしています。私はビューの状態を使用して画面を切り替える。今私は自分のキャラクター情報を表示するHomeView.mxml、インベントリーアイテムを表示するInventoryView.mxml、装備アイテムを示すEquipmentView.mxmlを持っています。それぞれにそれぞれのビューステートがあります。Flexでビューの状態が変化したときに関数を実行

私のメインのmxmlファイルでは、キャラクタのグローバル変数とゲーム内のアイテムのArrayCollectionを作成します。 Inventory and Equipmentのmxmlに2つのラベルを作成します。ラベルをクリックすると、currentState = "EquipmentView"または "InventoryView"を設定するクリックハンドラが呼び出されます

これが機能し、状態が変化し、それぞれのビューが正しく表示されます。

私の問題はEquipmentView状態です。私が最初に状態に入ると、私の装置の画像を表示し、クリックハンドラを設定するcreationComplete関数があります。アイテムをクリックすると、そのアイテムを「解除」して機器リストから削除し、画像を削除します。これもうまくいきますが、アイテムビューに移動してアイテムを装備してEquipmentViewに戻ると、イメージは表示されません。私はequipmentList変数の長さを数えるラベルを持っていますが、これはビューを切り替えると正確ですが、表示するイメージをもう一度表示することはできません。

ビューが変更されたときにdisplayEquippedItems()関数(元々creationCompleteで呼び出された)を呼び出す方法はありますか?ここ

は私の関数である。

protected function displayEquippedItems():void 
     { 
      Alert.show("Displaying Items"); 
      for (var i:int = 0; i<c.equippedItems.length; i++) 
      { 

       var item:Item = c.equippedItems.getItemAt(i) as Item; 
       switch (item.type) 
       {      
        case 'Weapon': 
         var il:ItemImage = new ItemImage(item); 
         il.source = "../assets/sword.gif"; 
         il.scaleX=.25; 
         il.scaleY=.25; 
         il.horizontalCenter=-80; 
         il.verticalCenter=-30; 
         il.addEventListener(MouseEvent.CLICK, equippedItemClicked); 
         equipGroup.addElement(il);       
         break; 
        default: 
         Alert.show("Didnt find a weapon"); 
         break; 
       } 
      } 
     } 

ItemImageは、私はそれはイメージ・コンポーネントを拡張し、唯一私は名前を取得することができます表示される項目に変数「項目」を設定し、タイプ(定義されたクラスでありますそして最終的に もequipGroupは、私はあなたが欲しいと考えているものを達成するために、いくつかの方法があります

答えて

3

私は装備アイテム

すべてのヘルプは素晴らしいだろうに保持するために、MXMLで定義されたばかりのグループ、感謝です)画像ソースを変更に。

最初はupdateComplete eventです。 creationCompleteはコンポーネントの作成サイクルが完了した後に一度だけ実行されますが、コンポーネントが再描画されるたびにupdateCompleteイベントが発生します。私は疑いもなく、このイベントはあなたが望むことをするでしょう。しかし、コードを何回も実行することには注意が必要です。多くのことがコンポーネントの再描画を引き起こす可能性があり、非常に特殊なユースケースのように聞こえます。

もう1つは、showイベントです。これは、コンポーネントが可視になるたびに発生します。状態がこのコンポーネントを示す状態に変わると起動するはずです。

特定の質問にお答えします。 stageChangeCompleteイベントを使用して、状態の変更が完了するたびにコードを実行できます。あなたの場合、私はこれがショーイベントと同様に機能すると信じています。しかし、あなたは別の場所でそれを聞いているでしょう。 stateChangeCompleteイベントは、状態を含むコンポーネントでリッスンするイベントです。 showイベントは、インベントリが含まれているコンポーネントでリッスンするものです。私は状態を制御するコンポーネントの子であると想定しています。

+0

updateCompleteは完璧です、ありがとうございました! 私はstateChangeCompleteを使用していましたが、正しい場所でそれを聞いていないため、動作しませんでした。 updateCompleteは私が必要とするものを正確にやっているようですが、私もショーを試みるつもりです – Aheinlein

3

Stateオブジェクトによって送出されるenterStateイベントを使用することもできます。あなたはこのようにMXMLでイベントリスナーを追加することができます。これについては優れている何

<s:states> 
    <s:State name="myState" enterState="myEventHandler()"/> 
</s:states> 

をし、「updateComplete」イベントはFlexEvent.UPDATE_COMPLETEは、コンポーネントが完全な「Flexのコンポーネントのライフサイクル」の実行を終了するたびに派遣されますということです。だから、あなたが何をしているかによって、このイベントがあなたが必要とするよりも何回も送出される(イベントハンドラがトリガされる)ことに気付くかもしれません。

その特定の状態に入るときenterStateイベントハンドラを使用することにより、あなたのコードのみが実行されます:)

+0

私はこの答えを考えていて、それを見ました。私は戻ってそれに+1を与えなければならないと決めました。いい答えだ。 – JeffryHouser

+0

あなたの返事ありがとうSunil D.残念ながらenterStateは私の特定の状況ではうまくいきませんでした(私が間違って試した可能性があります)。私の問題は、私のイベントハンドラが私のmxmlビューファイルの

  • 11. 再帰関数(Redux)での状態変化の回避
  • 12. redux経由で状態が変化したときにリッスンする - ReactJS
  • 13. 状態の変化に関係なく、リアクタンスリダクションの初期化関数
  • 14. ReactJsは、状態変数の変化
  • 15. Observableの状態をチェックし、実行/戻り関数(angular2、rxjs)
  • 16. 状態が不変の場合は、状態が変化したときに状態全体が置換されますか?
  • 17. 状態が変化したときにイベント遷移を実行するRuby/Rails状態マシンは存在しますか?
  • 18. 状態が変化したときにニードルが更新されない
  • 19. トグルボタンの状態が変化しない
  • 20. 状態がちょうど前の状態になったときにアクションを実行する方法
  • 21. 各状態変化のイオン実行機能
  • 22. JavaScriptの状態と状態の変化を追跡するためのイディオム
  • 23. デバイスがスリープモードに移行したときのアクティビティの状態は?
  • 24. 休止状態のビューでクエリを実行する(select文)
  • 25. 状態が複数のアクティビティにまたがるビュー
  • 26. React - 数秒ごとに状態の変化を確認する
  • 27. Lex/Flexの開始状態
  • 28. Flex includeIn(topLevelApplicationの状態)
  • 29. 状態変化後の呼び出し関数は、reactjsで発生します
  • 30. フローティングラベルがTextInputLayoutの状態を変更するときのアクションの実行方法?