0

我是 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;

有什么建议么?

4

2 回答 2

0

我对 AS3 也很陌生,而且这个问题有点晚了,但这是我学到的关于从类中访问 root 的知识:

Movieclip(root).userSpeed = 4;

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

Object(root).myfunction();

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

于 2014-11-07T16:51:31.427 回答
0

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

虽然主时间线始终与文档类(主类)相关联,并且您在主时间线上创建变量,然后您可以直接在主类的构造函数中使用它,但要考虑到一件重要的事情,时间线上定义的变量直到帧你给他们赋值的时候就会执行。

从你的代码我猜this.parent是主类的参考 - 文档类。如果这是真的,那么只需使用以下代码:

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; // You just access userSpeed variable because it 
                               // is member of Main class.
}
于 2013-02-24T20:16:33.430 回答