AS3:从舞台上的movieclip访问我的Main.as.

时间:2012-05-15 04:44:05

标签: actionscript-3 flash menu navigation movieclip

使用Adobe Flash Professional CS6,AS3
如果我需要提供更多信息,请告诉我 我正在尝试设置导航菜单,我的问题是,“如何从舞台上获取一个MovieClip来调用我的Main.as文件中的函数?”只有一个帧(我不想要更多)和不同的菜单屏幕,只是MovieClip,在需要时添加到带有AS的舞台。我在Main.as文件中有一个名为 _About()的公共函数,我的MovieClip“MenuScreen”无法访问。我可以成功地让_Menu()使用eventListeners将一个MovieClip添加到舞台上,但是当mc使回调更改屏幕时,我收到此错误:

TypeError:错误#1034:类型强制失败:无法将flash.display :: Stage @ 51ca0d1转换为flash.display.MovieClip。在MenuScreen / clickAbout()[MenuScreen :: frame1:32]

第1帧:32的代码是:

MovieClip(parent)._About();

我的Main.as中的第51行是:

public function _About():void
{
trace("The About Function");
}

下面我详细介绍了 Main.as ,并修剪了大部分脂肪。

package 
{
import stuff

public class Main extends MovieClip
{
    //Load the screen MCs onto the stage
    public var _menu:MenuScreen = new MenuScreen();
    public var _about:AboutScreen = new AboutScreen();
    public var isMenu:Boolean = true;
    public var isAbout:Boolean = false;

    public function Main()
    {
        _Menu();            
    }

    public function _Menu():void
    {
        isMenu = true;
        stage.addChild(_menu);
    }

    public function _About():void
    {
        trace("The About Function");
    }

3 个答案:

答案 0 :(得分:1)

解决问题的一个简单方法是将菜单项添加到舞台上!而是将它们添加到您的主类。这样,项目的父级就是main.as

但是你需要将父级转换为Main

Main(parent)._About();

也不是很好。这些物品现在不应该是它们背后的东西。

最好的方法就是从不同的屏幕发送事件。 意思是:创建屏幕对象时,如果发生screnn更改,则会调度自定义事件。

dispatchEvent(new Event("showAbout"));

在您的主课程中,您可以处理以下事件:

public function Main()
{
    _Menu(); 
    _menu = new MenuScreen();
    _menu.addEventHandler("showAbout", showAboutHandler);
}

public function showAboutHanlder(e:Event):void
{
     _About();
}

更好的是将屏幕标识符作为参数的自定义事件。这样,您只需添加一个处理程序,并在处理程序代码中决定要显示哪个屏幕。

在事件处理到位后,您的菜单项与主要部分没有直接连接。此外,主要不需要有关屏幕类的更多信息。

答案 1 :(得分:0)

查看MenuScreen完整的课程会有所帮助,但这可能会发生什么:

您正在public var _menu:MenuScreen = new MenuScreen();进行实例化,当发生这种情况时,可能会在MovieClip(parent)._About()MenuScreen添加stage.addChild(_menu);之前调用MenuScreen - 它不会当发生这种情况并且错误发生时,我们还没有父母。

解决这个问题的两种方法:

  • 在引用您的Main类的MenuScreen构造函数中添加必需参数。 public function MenuScreen($main:Main){中的构造函数将以MenuScreen开头,当您从Main类实例化public var _menu:MenuScreen = new MenuScreen(this);时,您将编写MenuScreen现在可以使用$ main._About()在MenuScreen的构造函数中。
  • addEventListener(Event.ADDED_TO_STAGE, addedStage)的构造函数中添加一个侦听器,用于检查何时将其添加到舞台:addedStage。在函数MovieClip(parent)._About()中,您可以正确地呼叫父级或舞台,{{1}}可能会在这里工作。

答案 2 :(得分:0)

设置静态属性:

public static var instance:Main;
public function Main(){
        instance = this;
        _Menu();            
    }

然后从任何地方您都可以使用代码:

Main.instance._About();