2016-10-10 12 views
0

私はAS3で試合をしていますが、試合開始からの時間に基づいて得点をしようとしていますが、試合が終わった時点でスコアが表示され、基本的には私は別のクラスでタイマーを作ったので、私はそのようなことをする方法を見て苦労して、私はメインのドキュメントクラスにスコアを追加しようとしています。ここで AS3:タイマーに基づくスコア

は、私が試したものです:メインクラスで

package cem { 

    import flash.display.MovieClip; 
    import flash.events.*; 


    public class Chronometre extends MovieClip { 

     var begin: Date; 
     public var seconds: uint = 0; 

     public function Chronometre() { 
      // constructor code 



     } 

     //************************************************Start the chrono*********************************************// 
     public function start() { 
      begin= new Date(); 
      this.addEventListener(Event.ENTER_FRAME, _actualize); 

     } 

     //************************************************Stop the chrono*********************************************// 
     public function stop() { 

      this.removeEventListener(Event.ENTER_FRAME, _actualize); 

     } 

     //************************************************Actualize the chrono*********************************************// 
     private function _actualize(e: Event) { 
      var msSpent: uint = new Date().getTime() - begin.getTime(); 



      seconds = Math.floor(msSpent/ 1000); 
      var milliseconds: uint = msSpent- (seconds * 1000); 

      affichage.text = seconds + ":" + milliseconds; 

     } 


    } 

} 

明らかに:この中

score.affichageScore.text = "votre score: " + chrono.seconds * 1000; 

、私はDateクラスを使用するタイマクラスです問題は、タイマークラスからメインクラスの '' score ''変数に秒の変数値を取得する方法ですか?

+0

Btw、 'Timer'クラスがあります。 – null

+0

パブリック変数の場合は、メイン文書で使用できるはずです。 –

答えて

1

各フレームに新しい日付を作成しないでください。これは、パフォーマンスが最も悪いオプションです。 nullが述べたようにそこに時間を数えることができるタイマークラスですが、それはさらに簡単になりますswfファイルが起動してから

getTimer(); 

これはミリ秒数を返します。だから、あなたはメインゲームクラスでこれをまっすぐにすることができます:

// when the game starts 
gameStartTime = getTimer(); 

// when the game ends 
gameEndTime = getTimer(); 

// calculate score with one point for each millisecond 
// (might be even better so that your scores won't always end in 000) 
myScore = gameEndTime - gameStartTime; 

// 1000 points for each second: 
seconds = Math.floor((gameEndTime - gameStartTime)/1000); 
myScore = seconds * 1000; 
+0

私はおそらく間違っていますが、プレイヤーがゲームを再開すると、これは役に立たなくなります。 メソッドgetTimer();あなたが言ったように、swfが開始されてからのミリ秒数を返します。 プレーヤーがゲームを再生する場合、getTimer()値に問題があります。 私は間違っていますか? – tatactic

+0

@tatacticあなたが正しいように見えます。彼の特定の使用のために働くかもしれないが、これは問題になる可能性があります。 –

+0

まあ、各ゲームの開始時にgameStartTimeを設定した場合、gameStartTimeが10または10.000.000になるかどうかに関係なく、同じ方法で動作します。 – Philarmon

関連する問題