Flex/Actionscript を使用したことがないので、明らかなことを尋ねている場合は申し訳ありませんが、この投稿を書く前に 3 日間 (Google とスタックオーバーフローの検索を含む) 作業を行っています。
Mini-IoC ベースの MVC フレームワークで作成された Flex 4 で作成されたゲームを変更するよう依頼されました。私が作成を依頼された 2 つの MOD は、ゲーム オーバー画面です。これは、最終的なスコアを表示し、導入画面に難易度の選択を表示します。ゲームオーバー画面を作成し、ゲームタイマーが切れたときにコントローラーを表示させることに成功しました。
今のところ、ゲームの構造は次のようになります。
Intro View -> Game View -> Game Over View
^ |
|__________ (retry?) ________|
最初の問題は、スコアを mainGame ActionScript ファイルからゲーム オーバー画面に渡すことです。
私が試したこと:
- gameOverViewBase に mainGame をインポートし、gameOverView mxml ファイルで mainGame.score 変数を呼び出します。
-編集!!!= 上記の方法は、mainGame のスコア変数を定数に変更すると機能しますが、変数のままだと、コントローラーは gameOverView をロードせず、ゲームは空の mainGame ビューに置かれます。
- ゲーム中にプレーヤーが得点するたびに、gameOverViewBase の新しいスコア変数に追加する関数を作成します。
- MainGame の終了時にスコアをパラメーターとして GameOverView に渡す
controller.loadGameOver(score);
これが最も論理的な方法のように思えました。そのため、メインのゲーム アクション スクリプト ファイルに到達するまで、パラメーターとして整数を取るように loadGameOver を設定して、ゲームの他のコンポーネントを通じて関数をたどりました。
public function loadGameOver(score:int) : void
{
loadView(GameOverView);
}
loadView 関数 (以下に示す) は、'score' パラメーターを渡す場所がわからないため、行き詰まる場所です。次のようになります。
private function loadView(viewClass:Class, modelClass:Class = null) : void
{
var view:View = new viewClass();
if(!view) throw new Error("Could not load view");
viewContainer.removeAllElements();
viewContainer.addElement(view);
view.controller = this;
}
2つ目の問題は、導入画面での難易度選択。mxml ファイルの 3 つのボタン (イージー、ノーマル、ハード) と、ActionScript のすべてのボタンでこれを行いました。
protected function onEasyButtonClick() : void
{
set = "easy"
controller.loadMainGame(set);
}
繰り返しますが、上記の loadView 関数に行き着きます。
要約すると、ビューとモデルの間でデータを渡す方法を知る必要があります。それが理想的な方法ではない場合、私はあなたがより良いと思う他の方法を受け入れます.
ありがとう!
ベン
PS私は助けたい人に私のソースコードを送ることができます:)