2016-10-10 3 views
0

Я делаю игру в AS3, и я пытаюсь сделать оценку, основанную на времени с начала игры, оценка будет отображаться, когда игра закончится и будет в основном быть секунд, так как игра начала умножаться на 1000. Но я изо всех сил пытаюсь понять, как это сделать, поскольку я создал таймер в отдельном классе, и я пытаюсь добавить оценку в основной класс документа.AS3: Оценка по таймеру

Вот что я пробовал:

в главном классе:

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

в этом, является класс таймера, где я использовал класс Date:

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; 

     } 


    } 

} 

Очевидный проблема в том, как получить значение переменной «секунд» от класса таймера до переменной «оценка» в основном классе?

+0

Кстати, есть класс «Таймер». – null

+0

Если это общедоступная переменная, она должна быть доступна основному документу. –

ответ

1

Пожалуйста, не создавайте новую дату на каждом фрейме - это худший вариант производительности. Как уже упоминалось нуль есть класс таймер, который может отсчитывать время, но это может быть еще проще:

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