AS3从类中修改根时间轴中的变量集

时间:2013-02-24 15:43:53

标签: actionscript-3 class variables

我是Action Script 3的新手,我在一个帧的根时间轴内有一个变量来设置我游戏角色的速度:

var userSpeed:Number = 2;

现在,我有一个班级用于我的拍摄,我添加了一个命中测试,这样当我拍摄电源时它会将速度更改为4(默认值的两倍),但是因为这是我的课程内部,我很想知道我如何在类中修改变量。

if(this.hitTestObject(speedPower) || this.x < 0 || this.x > stage.stageWidth || this.y < 0 || this.y > stage.stage.height)
{
this.removeEventListener(Event.ENTER_FRAME, moveShot);
this.parent.removeChild(thisshootTurret);
this.parent.userSpeed = 4;
}

访问变量的方式只是随机猜测,我在网上找不到任何符合我问题的问题所以我只能想出来。

目前的方式给了我这个错误:

1119: Access of possibly undefined property userSpeed through a reference with static type flash.display:DisplayObjectContainer.

我尝试时遇到同样的错误:

root.userSpeed = 4;

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

无论何时在时间轴上定义变量或函数(无论是特定MovieClip的主时间轴还是时间轴),它们都会被添加到关联的类中(如果有的话,没有必要将类关联到每个{{ 1}})拥有时间轴的MovieClip

虽然主时间轴始终与文档类(主类)相关联,并且您在主时间轴上创建变量,但您可以直接在Main类的构造函数中使用它,但是考虑一个重要的变量在执行为其赋值的帧之前,不会初始化在时间轴上定义的内容。

从您的代码我猜测MovieClip是Main类的引用 - Document Class。如果这是真的,那么只需使用以下代码:

this.parent

答案 1 :(得分:0)

我对AS3也相当新,在问题上有点晚了,但这是我从类中访问root的过程中学到的:

Movieclip(root).userSpeed = 4;

应该做的伎俩。您还可以在类中调用根函数:

Object(root).myfunction();

永远不要在你的constuctor函数中调用root或parent,它将返回null。您可以使用Event.ADDED函数和事件处理程序来规避这一点。