所以我创造了一个游戏,我想添加的是一个不断增加的计数器,直到玩家输掉游戏。
我创建了我的分数类,它看起来像这样:
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 :(得分:0)
我假设scoreDisplay是舞台上的命名对象。您可能会发现在每个被调用的函数中将trace()添加到脚本中很有用。这样你就可以看到哪些被正确调用了。例如trace(“Engine Instantiated。”);和跟踪(“接收定时器事件”);将告诉您的类是否正确实例化。如果是,并且触发器不起作用,您就会知道问题出在这两点之间。然后朝着代码执行的中间工作,直到找到问题为止。
您还可以向舞台添加事件侦听器以输入帧事件,并使用它来触发计数功能。此事件始终是广播的,因此使用时应使用比添加计时器更少的资源。
答案 1 :(得分:0)
首先,您不需要将舞台类传递给MovieClip子节点,一旦将它们添加到舞台上,您就可以使用this.stage属性访问舞台。
其次,Timer类延迟参数在文档中描述如下:
delay:Number - 定时器事件之间的延迟,以毫秒为单位。一个 建议不要延迟低于20毫秒。定时器频率 限制为每秒60帧,意味着延迟低于16.6 毫秒会导致运行时问题。
因此,如果你真的跟踪秒数,你的计时器应该是:
public var timer:Timer = new Timer(1000);
编辑:
以下是我如何实施您在评论中描述的分数:
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);
}
}
答案 2 :(得分:0)
你确定scoreDisplay足够大吗?您的数字每秒会增加100,如果您的文本字段只有2个字符,您将看到随机数。