2011-11-24 3 views
0

私はゲームを作成して、私が追加したかったのは、プレーヤーがゲームを失うまで継続的に増加するカウンターでした。Flashゲームのスコアが機能しない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); 

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

答えて

0

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

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

0

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

遅延: - タイマーイベント間の遅延、ミリ秒単位で数値を

第二には、タイマークラスの遅延パラメータは、ドキュメントに、次のように説明されます。 遅延が20ミリ秒より短いことはお勧めしません。タイマー周波数 は60フレーム/秒に制限されています。つまり、16.6 ミリ秒未満の遅延は実行時に問題を引き起こします。

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

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

EDIT:

は、ここで私はあなたがコメントで説明したスコアを実装してみましょう:

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

したがって、私がこの例で行ったスピードでカウントするタイマーはどのようにできますか? – BoneStarr

+0

あなたは、最後の呼び出しからどれくらいの時間が経過したかを確認して使用することはできません。とにかく、なぜ急激に何かを増やしたいのですか?ユーザーがそれを見ることができるようではありません(テキストはframeRateに従ってのみリフレッシュされます)。 – felipemaia

+0

私はこのようなタイマーを望んでいました:http://www.youtube.com/watch?v=Cx_r2ga7ipQ&feature=related – BoneStarr

0

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

+0

ええ、私はそれをもっと長くしました、それでも同じ問題があります – BoneStarr

関連する問題