フラッシュゲームのスコアが動作しないAS3、どうか助けてください?

だから私が追加したかったのは、ゲームを作成していて、プレイヤーがゲームを失うまで継続的に増加するカウンターでした。

スコアクラスを作成したところ、次のようになりました。

package 
{

    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class Score extends MovieClip
    {
        public var second:Number = 0;
        public var timer:Timer = new Timer(10);
        private var stageRef:Stage;


        public function Score(stageRef:Stage)
        {
            x = 537.95;
            y = 31.35;
            this.stageRef = stageRef;
            timer.addEventListener(TimerEvent.TIMER, clock);
            timer.start();

        }

        function clock(evt:TimerEvent):void
        {
            second += 1;
            scoreDisplay.text = String("Score: " +second);
        }

    }
}

これはステージに追加する私のエンジンクラスです:

package  {
//list of our imports these are classes we need in order to
//run our application.
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;

public class Engine extends MovieClip{

    private var enemyList:Array = new Array();
    private var ourBoat:Boat;
    private var score:Score;


    public function Engine() : void{
        //create an object of our ship from the Ship class
        ourBoat = new Boat(stage);
        score = new Score(stage);
        //add it to the display list
        stage.addChild(ourBoat);
        stage.addChild(score);

だから、ステージ上のタイマーを作成し、連続的にインクリメントしますが、コンパイルするときに何のエラーもなくなり、何らかの理由でタイマが機能しない場合は、乱数が表示されますので、助けてください!これを行うより良い方法があれば、私に教えてください。

0

3 答え

私はscoreDisplayがステージ上の名前付きオブジェクトであると仮定しています。呼び出される各関数のスクリプトにtrace()を追加すると便利です。そうすれば、どれが正しく呼び出されているのかを見ることができます。たとえば、trace( "Engine Instantiated");およびトレース(「Timer Event Received」)。あなたのクラスが正しくインスタンス化されているかどうかを確認します。それが、トリガーが機能していない場合は、あなたの問題がこれらの2つのポイントの間にあることがわかります。そして、問題が見つかるまで、コード実行の途中で作業してください。

また、入力イベントのためにイベントリスナーをステージに追加し、それを使用してカウント機能をトリガーすることもできます。このイベントは常にブロードキャストされるため、タイマーを追加するよりも少ないリソースを使用する必要があります。

0
追加された

あなたは確かにscoreDisplayは十分ですか?あなたの数字は100秒ごとに増加します。あなたのテキストフィールドが2文字しかない場合は、乱数が表示されます。

0
追加された
ええ、私はそれをもっと長くしました、同じ問題を引き続き
追加された 著者 BoneStarr,

まず、ステージクラスをMovieClipの子に渡す必要はありません。ステージにステージを追加すると、this.stageプロパティを使用してステージにアクセスできます。

第2に、Timerクラスの遅延パラメータは、ドキュメントでは次のように記述されています。

delay:Number - タイマーイベント間の遅延(ミリ秒単位)。 A   20ミリ秒未満の遅延は推奨されません。タイマー周波数   秒当たり60フレームに制限されており、遅延は16.6未満です   ミリ秒は実行時の問題を引き起こします。

したがって、実際に秒を追跡している場合は、タイマーは次のようになります。

public var timer:Timer = new Timer(1000);

編集:

コメントに記述したスコアを実装する方法は次のとおりです。

public class Score extends MovieClip
{
    public var second:Number = 0;

    var pointsPerSecond : Number = 10;

    private var stageRef:Stage;


    public function Score(stageRef:Stage)
    {
        x = 537.95;
        y = 31.35;
        this.stageRef = stageRef;
        this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    function clock(evt:Event):void
    {
        second += pointsPerSecond/stage.frameRate;//Note that if the game is running slow (flash cant keep the frameRate you asked for), the score will also grow slowly
        scoreDisplay.text = String("Score: " +second);
    }
}
0
追加された
あなたはできません、あなたができることは、最後の呼び出しからどれくらいの時間が経過したかを確認し、それを使用することです。とにかく、なぜ急激に何かを増やしたいのですか?ユーザーがそれを見ることができるようではありません(テキストはframeRateに従ってのみリフレッシュされます)。
追加された 著者 felipemaia,
私の編集をチェック...
追加された 著者 felipemaia,
私はScoreクラス全体を表示するように編集しました。
追加された 著者 felipemaia,
だから私はこの例でやったスピードでカウントするタイマーをどのようにすることができますか?
追加された 著者 BoneStarr,
私はこのようなタイマーを望んでいました: youtube.com/watch?v=Cx_r2ga7ipQ&feature=related
追加された 著者 BoneStarr,
あなたのおかげでfelipemaniaの助けを借りて、あなたの編集で言及したコードを編集しようとしましたが、まだ運がないし、私は追加できませんでした:this.addEventListener(Event.ENTER_FRAME、onEnterFrame);それは間違いを投げつけ続けた
追加された 著者 BoneStarr,
Filipeに感謝します。これはもっと良い方法でしたが、今問題が何かを知りました。 updateDisplay movieclip埋め込みプロパティの中で選択されている文字がないので、すべての文字を選択したときにうまくいきました。なぜなら、テキストボックスが他の文字を表示することが制限されていたからです。 :/助けてくれてありがとう。
追加された 著者 BoneStarr,