0

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

TypeError:错误 #1034:类型强制失败:无法将 flash.display::Stage@51ca0d1 转换为 flash.display.MovieClip。在 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");
    }
4

3 回答 3

1

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

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

Main(parent)._About();

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

最好的方法是从不同的屏幕分派事件。意思是:你创建你的屏幕对象,当屏幕发生变化时有调度自定义事件。

dispatchEvent(new Event("showAbout"));

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

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

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

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

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

于 2012-05-15T06:27:56.987 回答
0

查看完整的课程会有所帮助MenuScreen,但可能会发生以下情况:

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

解决此问题的两种方法:

  • MenuScreen在引用您的Main类的构造函数中添加必需的参数。您的构造函数MenuScreen将从开始,当您从类public function MenuScreen($main:Main){实例化时,您现在可以编写 $main._About() in的构造函数。MenuScreenMainpublic var _menu:MenuScreen = new MenuScreen(this);MenuScreen
  • MenuScreen的构造函数中添加一个侦听器,用于检查何时将其添加到舞台: addEventListener(Event.ADDED_TO_STAGE, addedStage)。在该函数addedStage中,您可以正确调用父级或舞台,并且MovieClip(parent)._About()可能会在这里工作。
于 2012-05-15T05:25:06.113 回答
0

设置静态属性:

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

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

Main.instance._About();
于 2012-05-15T05:39:11.750 回答