0
var scoreTotal:String = "Global"; //in the engine but not in the package

if (currentKey is Left && leftKey) //in each level to score points to score on stage and scoreTotal
{
    score += scoreBonus;
    scoreTotal += scoreBonus;
    currentKey.active = false;
}

public var score7:int = scoreTotal;// This is in the last level to print the score

エラー 1120: 未定義のプロパティ scoreTotal へのアクセス。

誰でも助けることができますか?

4

1 に答える 1

1

グローバル変数を使用することはお勧めできません。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 から独立して行うことです。

于 2012-07-10T21:46:54.167 に答える