【发布时间】:2013-05-11 16:12:30
【问题描述】:
所以,我的游戏菜单位于一个单独的 .fla 文件中,我使用了类似这样的加载器将菜单加载到我的游戏中:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.ui.Mouse;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.text.TextFormat;
import flash.text.TextField;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.system.LoaderContext;
import flash.display.Sprite;
import flash.net.Socket;
import caurina.transitions.Tweener;
public class Main extends MovieClip {
public static var gameLayer:Sprite = new Sprite;
public static var endGameLayer:Sprite = new Sprite;
public static var menuLayer:Sprite = new Sprite;
public var gameTime:int;
public var levelDuration:int;
public function Main()
{
addChild(gameLayer);
addChild(endGameLayer);
addChild(menuLayer);
var myMenu:Loader = new Loader();
var url:URLRequest = new URLRequest("Menu.swf");
myMenu.load(url);
myMenu.contentLoaderInfo.addEventListener(Event.COMPLETE, menuLoaded);
function menuLoaded(event:Event):void
{
menuLayer.addChild(myMenu.content);
}
playBtn.addEventListener(MouseEvent.CLICK, startGame);
}
public function startGame(e:Event)
{
// Code to remove the menu (menuLayer.removeChild?)
// Code here to start timers etc
}
我为我的按钮设置了实例名称,但是当我尝试执行 menuLayer.playBtn.addEventListener(MouseEvent.CLICK, startGame); 之类的操作时,我收到消息说 Access of undefined property playBtn。
现在,我再次检查了我的 Menu.fla,我确实为该按钮指定了一个实例名称 playBtn,但它不起作用。请问有什么帮助吗?可能是我错过了一些非常明显的东西,但我不确定是什么。
编辑:尝试另一种方式(将菜单转换为影片剪辑),但不能 100% 确定如何准确地做到这一点。我的代码是:
public class Main extends MovieClip {
var mainMenu:menuMain = new menuMain;
// Other variables
public function Main()
{
addChild(gameLayer);
addChild(endGameLayer);
addChild(menuLayer);
menuLayer.addChild(mainMenu);
mainMenu.addEventListener(Event.COMPLETE, menuLoaded);
}
function menuLoaded(event:Event):void
{
//var mainMenu:LoaderInfo = event.currentTarget as LoaderInfo;
//var menuInstance:MovieClip = menuLayer.getChildAt(0) as MovieClip;
// now you can actually add the listener, because the content is actually loaded
mainMenu.playBtn.addEventListener(MouseEvent.CLICK, startGame);
}
public function startGame(e:Event)
{
// Code to execute timers etc.
}
【问题讨论】:
-
menuLayer 到底是什么?它是您通过链接类名称实例化的库中的符号吗?您需要按原样发布更多代码。如果您在该行收到错误,那是因为 menuLayer 没有 playBtn。我相信这个错误是正确的。
-
我猜,但可能是一个问题,因为您没有直接将加载程序添加到显示列表(我知道您正在添加加载的内容,但加载程序可能不喜欢这种方式)。试试“menuLayer.addChild(myMenu);”在 menuLoaded 方法而不是当前代码中
-
更新了代码。
Access of undefined property playBtn错误是我目前唯一的错误。使用“menuLayer.addChild(myMenu);”在 menuLoaded 方法中给出了相同的错误。 -
在您发布的代码中,您编写了
playBtn.addEventListener(MouseEvent.CLICK, startGame);,而在 cmets 中,您使用了正确的语法,即menuLayer.playBtn.addEventListener(MouseEvent.CLICK, startGame);。是哪一个? -
无论如何,它们都会给出相同的错误。我都试过了。
标签: actionscript-3 flash flash-cs6