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