为什么多次调用自定义类的构造函数?

时间:2012-03-10 16:00:12

标签: actionscript-3 flash class constructor

我创建了一个自定义类(.as在下面:)。它存在于我的主时间轴中的三个实例(panel1,panel2和panel3)中,目前只有一个关键帧。

当我调试我的文件时,在第1帧中,为每个实例调用构造函数。凉。但是,稍后构造函数被称为每个实例的AGAIN,消除了我所做的任何更改。

通过从库中拖动实例,所有实例都放在舞台上。我的脚本中没有“= new Scorepanel()行。

是什么引发了这种情况,我该如何预防呢?

- 肯(非常沮丧)富兰克林

{

import flash.display.MovieClip;
import fl.text.TLFTextField;

public class scoreunit extends MovieClip
{
    private var team:String = "WHOAMI";
    private var points:Number = 0;
    private var scorevalue:String;
    private var teamname:String;
    private var inited:Boolean = false;

    function scoreunit()
    {
        if (! inited)
        {
            this.teamname = team;
            this.scorevalue = String(points);
            var teamnamebox=new TLFTextField();
            teamnamebox.x = 2.25;
            teamnamebox.y = 295.25;
            teamnamebox.width = 295.25;
            teamnamebox.height = 70;
            teamnamebox.text = team;
            var scorevaluebox=new TLFTextField();
            scorevaluebox.x = 2.25;
            scorevaluebox.y = 95.80;
            scorevaluebox.width = 295;
            scorevaluebox.height = 97.5;
            scorevaluebox.text = scorevalue;
            trace("I set the starting values");
            trace("teamnamebox = ",teamnamebox.text);
            trace("scorevalue = ",scorevaluebox.text);
            inited = true;
        }
    }

    public function score():Number
    {
        return points;
    }

    public function winpoints(n:Number)
    {
        points +=  n;
        scorevalue = String(points);
        scorevaluebox.text = scorevalue;
    }

    public function losepoints(n:Number)
    {
        points -=  n;
        scorevalue = String(points);
        scorevaluebox.text = scorevalue;
    }

    public function setname(s:String)
    {
        team = s;
        teamname = team;
        teamnamebox.text = s;
        trace("I changed the name to ",teamnamebox.text);
    }

    public function buzzin()
    {
        this.gotoAndStop("buzzedin");
    }

    public function makeddselect()
    {
        this.gotoAndStop("ddtarget");
    }

    public function makeyay(y:Number)
    {
        switch (y)
        {
            case 1 :
                this.gotoAndStop("yay1");
                break;
            case 2 :
                this.gotoAndStop("yay2");
                break;
            case 3 :
                this.gotoAndStop("yay3");
                break;
            case 4 :
                this.gotoAndStop("yay4");
                break;
            case 5 :
                this.gotoAndStop("yay5");
                break;
            case 6 :
                this.gotoAndStop("yay6");
                break;
            default :
                trace("CRASH! "+y+" IS NOT A VALID YAY!");
        }
    }

    public function makeboo(b:Number)
    {
        switch (b)
        {
            case 1 :
                this.gotoAndStop("boo1");
                break;
            case 2 :
                this.gotoAndStop("boo2");
                break;
            case 3 :
                this.gotoAndStop("boo3");
                break;
            case 4 :
                this.gotoAndStop("boo4");
                break;
            case 5 :
                this.gotoAndStop("boo5");
                break;
            case 6 :
                this.gotoAndStop("boo6");
                break;
            default :
                trace("CRASH! "+b+" IS NOT A VALID BOO!");
        }
    }

    public function makescrewing()
    {
        this.gotoAndStop("evilface");
    }

    public function makescrewed()
    {
        this.gotoAndStop("screwed");
    }

    public function makesplat()
    {
        this.gotoAndStop("eekface");
    }

    public function makefreeze()
    {
        this.gotoAndStop("frozen");
    }

    public function makehome()
    {
        this.gotoAndStop("inactive");
    }

}

}

1 个答案:

答案 0 :(得分:0)

您遇到的问题不是来自您的代码,而是来自时间轴。您的类中的代码只能访问当前显示的框架的元素,并且可以访问其他实例,符号,以及当前框架之外的任何内容。

你的问题是闪存第一次穿过每一帧,在调试中突出显示每个对象是否正确构建,但是一旦它到达时间轴上的最后一帧,它就会回到第一帧,再次执行从那里开始的一切,因为帧上出现的任何物体都会再次重新设置。

您需要避免手动将类实例放在舞台上。

此外,这是个人练习,如果您需要使用框架和代码,更喜欢使用单帧剪辑,并从代码中添加addChild()图标库,资源和gotoAndStop()。你最终会有更多的控制权,而且不那么沮丧。但总体而言,如果您正在编码,请尽可能避免使用框架;)

希望这有帮助!