グローバル変数を使用することはお勧めできません。AS3 にはそのようなものはありません。代わりにScore
、スコアの追跡に関連するものを含むクラスを作成してください。このクラスの単一のインスタンスをメイン アプリケーションに保持します。次に、イベントとリスナーを使用して、スコアを更新するゲーム イベントをアプリケーションに通知します。
public class Score {
private var total:int;
private var levels:Array;
public function addPoints ( level:int, points:int ) : void {
total += points;
levels[level] += points;
}
public function get scoreTotal() : int {
return total;
}
public function getLevelScore( level:int ) : int {
return levels[level];
}
public function Score(numLevels:int) : void {
total = 0;
levels = [];
var i:int = -1;
while( ++i < numLevels) levels[i] = 0;
}
}
public class Main {
private var score:Score = new Score( 7 );
private var gameEngine:GameEngine;
....
private function initGameScore() : void {
gameEngine.addEventListener ( GameEvent.SCORE, onGameScore );
gameEngine.addEventListener ( GameEvent.BONUS, onGameBonus );
}
private function onGameScore( ev:GameEvent ) : void {
addPoints( ev.points );
}
....
}
もちろん、 GameEvent は field から派生しflash.events.Event
、 field を含む必要がありますpoints:int
。スコアリングに値する何かが発生するたびに、GameEngine からそれらをディスパッチします。
これのより高度なバージョンは、イベントとポイントのハッシュ テーブルを保持し、実際のスコアリング (つまり、イベントからポイントへのマッピング) を GameEngine から独立して行うことです。