AS3:从舞台上的影片剪辑访问我的 Main.as



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

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

Frame1: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");
    }

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

但是您需要将父级强制转换为主

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();
}

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

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

设置静态属性:

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

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

Main.instance._About();

查看MenuScreen的完整类会有所帮助,但以下是可能发生的事情:

您正在public var _menu:MenuScreen = new MenuScreen();处实例化,发生这种情况时,它可能在您stage.addChild(_menu);MenuScreen添加到舞台之前调用MovieClip(parent)._About() - 发生这种情况并发生错误时,它还没有父级。

解决此问题

的两种方法:

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

相关内容

  • 没有找到相关文章

最新更新