主时间轴上的参考符号

时间:2010-04-08 10:52:03

标签: flash actionscript-3

这是google不起作用的那些高级基本问题之一。我通常从我的类调度事件并处理文档类中的用户界面。但是现在我想将所有UI分离到一个单独的类中,可以被其他类访问。

我已经将它作为子项添加到主/文档类中,但是如何在不通过parent.parent shananigans的情况下引用主类?

修改。我记得还有一件事。我的一些UI元素没有以编程方式添加。

这是我的代码。我可能得到未定义的属性错误。

package rpflash.ui {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Stage;
import nowplaying;

public class RPUserInterface{

    public function RPUserInterface(){
        var np:nowplaying = new nowplaying();
        MovieClip(this.root).addChild(np);
        }


}   
}

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,在AS3中不推荐使用Root;如果您尝试使用np MovieClip尝试将其添加到舞台上,只需要一个直截了当的this.addChild(np)即可。

至于从UI中引用主Document类中的内容,我假设您正在从Main中创建UI类?如果是这样,最简单的方法(虽然有些人可能会指出你创建一个强引用,这可能会泄漏内存)是在你的UI类中创建一个接受Main类型的对象的函数,然后从Main调用它,同时传递它本身就像这样:

//inside Main
UIclassInstance.setMain(this);

//inside UI class
public function setMain(mainIn:Main):void
{
   main = mainIn;
}

您需要在UI类中使用Main类型的成员变量。像这样,您可以使用main.someObjectInMain;访问Main内部的内容。

希望有所帮助,

得不

答案 1 :(得分:1)

你得到一个可能未定义的错误,因为root不是以前的版本。 root现在是结构的编程基础,stage已经取代了显示对象的持有者,因此应该引用添加子等。

Stage是一个动态属性,仅提供给displaylist上的对象。因此,如果您以编程方式创建此类,则可能会返回null错误,如果您只是为stage更改root,因为它尚未被赋予阶段引用,因为它尚未添加到列表中。如果可能没有附加Event.ADDED_TO_STAGE侦听器,请尝试使用public static const PLAY_THIS:String = "the event to play the mc"; public function RPUserInterface(){ var np:nowplaying = new nowplaying(); addEventListener(Event.ADDED_TO_STAGE, init); } public function getClip():nowplaying{ return np; } private function init(ev:Event):void{ //If you want it to play immediately, else use mouseEvent etc dispatchEvent(new Event(PLAY_THIS)); } 侦听器,以确保该舞台不会为空。

更重要的是你计划以这种方式将事物附加到舞台上。一般来说这不是一个好主意,因为舞台本身不会直接引用孩子(虽然你可以使用getChildByName或getChildAt)并且可能会导致以后丢失引用的问题。尝试考虑将子项添加到当前用户界面或添加一个函数,该函数将为传递的剪辑分配某种值,例如:

var userInt:RPUserInterface = new RPUserInterface();
userInt.addEventListener(RPUserInterface.PLAY_THIS, addFromThis);
addChild(userInt);

private function addFromThis(ev:Event){
    //add a global var ref here if needed.
    var clip = (ev.target as RPUserInterface).getClip();
    addChild(clip);
}

在主时间轴上:

{{1}}

它可能看起来更复杂,浪费空间,但它的良好实践和更容易让类像这样交互。它后来也很容易改变。