AS3:基于计时器的分数

时间:2016-10-10 03:05:10

标签: actionscript-3 flash timer

我在AS3中制作游戏并且我一直试图根据游戏开始以来的时间进行分数,分数会在游戏结束时显示,并且基本上是秒游戏开始乘以1000.但我很难看到如何做这样的事情,因为我已经把计时器放在一个单独的课程中,我试图将分数添加到主文档课程中

以下是我尝试的内容:

主要课程中的

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;

        }


    }

}

显而易见的问题是如何获得“秒”'''''从计时器类到“得分”的变量值''主类中的变量?

1 个答案:

答案 0 :(得分:1)

请不要在每一帧上创建一个新日期 - 这是表现最差的选项。正如null所提到的,有一个计时器类可以计算时间,但它可以更容易:

getTimer();

返回自swf启动以来的毫秒数。所以你可以直接在你的主要游戏类中做到这一点:

// 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;