我对动作脚本3相对较新,而且这个让我难过。这是我的班级;
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Clicker extends MovieClip {
public var clicks:uint;
public var string:String;
public function Clicker() {
// constructor code
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
addEventListener(Event.ADDED_TO_STAGE, alignCentre);
string = "clicks: ";
clicks = 5; // I can change it here
}
public function clicked(e:MouseEvent):void{
clicks++;
trace(clicks); // it outputs updated value here
}
public function alignCentre(e:Event):void{
x = stage.stageWidth / 2 - width/2;
y = stage.stageHeight / 2 - height/2;
}
public function addedToStageHandler(e:Event):void{
this.stage.addEventListener(MouseEvent.CLICK, clicked);
}
public function get_clicks():uint{
trace(clicks); // gives me whatever I initialise it to in the constructor
return clicks;
}
}
}
我想从Clicker类中返回点击的值,但是值仍然是我在get_clicks()中的构造函数中设置的值,我不知道为什么。
变量具有类范围,那么为什么它会返回get_clicks()的默认值(在本例中为5)?我的clicked()方法跟踪正确更新的值。这是范围问题吗?我很困惑。
这是我创建对象的第一帧;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.text.TextField;
var clicks:TextField = new TextField();
var circle:Clicker = new Clicker();
clicks.text = circle.get_clicks().toString();
trace(circle.get_clicks());
addChild(circle);
addChild(clicks);
正如您对我遇到的问题所期望的那样,一遍又一遍地追踪吐出,并且Clicks不会从5变化。
编辑:
有一个错误,但修复它导致点击根本不更新。我在第一帧上有一个库版本的movieclip,而不是用addChild将对象添加到帧中。现在我已经添加了圈子,点击不会更新,因为单击我的对象时没有触发clicked()方法。
答案 0 :(得分:0)
解决:
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.text.TextField;
var clicks:TextField = new TextField();
var circle:Clicker = new Clicker();
var myTimer:Timer = new Timer(100,0);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void{
trace("Timer is Triggered");
trace(circle.get_clicks());
clicks.text = circle.get_clicks().toString();
addChild(circle);
addChild(clicks);
}
myTimer.start();
我没有使用时间轴和帧,而是在计时器监听器中包含了我想要重复的代码。完全符合预期。