AS3:基于计时器的分数
AS3: Score based on timer
我正在 AS3 中制作游戏,我一直在尝试根据游戏开始后的时间来计算分数,分数会在游戏结束时显示,基本上是游戏后的秒数开始乘以 1000。但是我正在努力了解如何做这样的事情,因为我已经在单独的 class 中制作了计时器并且我正在尝试将分数添加到主文档 class .
这是我尝试过的方法:
主要class:
score.affichageScore.text = "votre score: " + chrono.seconds * 1000;
这里是计时器 class,我在其中使用了日期 class:
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;
}
}
}
明显的问题是如何从计时器class中获取''seconds''变量值到主class中的''score''变量?
请不要在每一帧上创建新日期 - 这是性能方面最差的选项。正如 null 所提到的,有一个计时器 class 可以计算时间,但它可以更容易:
getTimer();
此 returns 自 swf 启动以来的毫秒数。所以你可以在你的主游戏中直接这样做 class:
// 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;
我正在 AS3 中制作游戏,我一直在尝试根据游戏开始后的时间来计算分数,分数会在游戏结束时显示,基本上是游戏后的秒数开始乘以 1000。但是我正在努力了解如何做这样的事情,因为我已经在单独的 class 中制作了计时器并且我正在尝试将分数添加到主文档 class .
这是我尝试过的方法:
主要class:
score.affichageScore.text = "votre score: " + chrono.seconds * 1000;
这里是计时器 class,我在其中使用了日期 class:
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;
}
}
}
明显的问题是如何从计时器class中获取''seconds''变量值到主class中的''score''变量?
请不要在每一帧上创建新日期 - 这是性能方面最差的选项。正如 null 所提到的,有一个计时器 class 可以计算时间,但它可以更容易:
getTimer();
此 returns 自 swf 启动以来的毫秒数。所以你可以在你的主游戏中直接这样做 class:
// 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;