类中的变量不返回更新的值

时间:2014-11-13 23:16:58

标签: actionscript-3

我对动作脚本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()方法。

1 个答案:

答案 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();

我没有使用时间轴和帧,而是在计时器监听器中包含了我想要重复的代码。完全符合预期。