我正在使用flash / actionscript进行游戏,特别是我遇到了一些问题。我对闪存的知识有点有限,所以可能在这里没有帮助我,但无论如何。在我的游戏中,我有一个帮助按钮。如果单击此按钮,则会弹出一个屏幕,显示有关如何为播放器执行操作的说明。指令分为多个SWF文件,因此每次单击此按钮时,其中一个外部SWF文件将加载到游戏中以供使用。
我可以很好地完成这一部分,但是如果玩家进一步进入游戏并点击帮助按钮,则会显示帮助,以及之前显示的每个帮助文件。
显然我不希望这种情况发生,我尝试了很多事情但没有成功。
非常感谢任何建议。
编辑: 这是我用来加载帮助文件的代码。
private function prepHelp(title:String):void
{
// introduction help files
switch(title) {
case "Welcome to Game Module 1": gameUI.singleton.loadHelp("Help/game_module1.swf"); break;
case "Welcome to Game Module 2": gameUI.singleton.loadHelp("Help/game_module2.swf"); break;
case "Welcome to Game Module 3": gameUI.singleton.loadHelp("Help/game_module3.swf"); break;
}
}
这些在gameUI类中调用我的loadHelp()函数:
public function loadHelp(file_name:String):void
{
helpBtn.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void {
_helpObject.loadHelp(file_name);
singleton.addChild(_helpObject);
_helpObject.dispatchEvent(new Event("getHelp"));
}
);
}
所以帮助SWF在我的helpView.as类中加载了我的_helpObject对象:
public class helpView extends Sprite
{
// variables associated with loading help content
private var _helpLoader:Loader;
private var _loader:Loader;
private var _helpRequest:URLRequest;
private var _helpMc:MovieClip = new MovieClip();
private var _exitButton:Sprite = new Sprite();
public function helpView():void {}
public function loadHelp(help_file:String):void
{
_helpRequest = new URLRequest("swf/help_files/"+help_file);
initialize();
addEventListener("getHelp", getHelp);
}
private function initialize():void
{
_exitButton.graphics.lineStyle(1, 0x000000, 1);
_exitButton.graphics.beginFill(0xffffff);
_exitButton.graphics.drawRect(0, 0, 75, 25);
_exitButton.graphics.endFill();
_exitButton.buttonMode = true;
_exitButton.alpha = 1;
_exitButton.x = gameUI.singleton.stage.stageWidth - 210;
_exitButton.y = gameUI.singleton.stage.stageHeight - 55;
_exitButton.addEventListener(MouseEvent.CLICK, closeHelp);
}
private function getHelp(evt:Event):void
{
_helpLoader = new Loader();
_helpLoader.load(_helpRequest);
_helpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showHelp);
}
private function showHelp(evt:Event):void
{
_loader = Loader(evt.target.loader);
// set the width and height of the help swf to the dimensions of the game window.
_loader.content.width = gameUI.singleton.stage.stageWidth;
_loader.content.height = gameUI.singleton.stage.stageHeight;
_helpMc.addChild(_loader.content);
_helpMc.addChild(_exitButton);
addChild(_helpMc);
setChildIndex(_helpMc, numChildren - 1);
_helpLoader.removeEventListener(Event.COMPLETE, showHelp);
}
private function closeHelp(evt:MouseEvent):void
{
removeChild(_helpMc);
}
}
答案 0 :(得分:1)
我认为您遇到的问题是孤立的swfs。因此,当加载swf时,它会显示出来,但是当你准备好移动到下一个swf时,它永远不会被卸载(至少没有正确卸载)......
如果你想保持这种技术,你需要确保在使用它时卸载swf(正确,没有泄漏)。
在我的游戏中,通常指令屏幕不是很重,我想加载和卸载swf,所以我不确定你的情况,但我建议的一个建议是:
在显示游戏之前加载所有swfs和信息(预加载器阶段) 然后根据需要显示或隐藏相应的帮助剪辑。
IE:
如果你能提供一些资料,我可能会更有效地帮助你。
答案 1 :(得分:0)
你可以删除/卸载加载这些文件的装载程序帮助外部swf ..
addChild(yourloader) //adds the loader
removeChild(yourloader) // removes your loader
此外,如果你使用数组存储电影(SWFS),你可以清除array.lenght = 0; 循环函数可能更合适。
var len:int = TempSWFS.length;
for( var i:int = 0; i < len; i++ ) {
if(TempSWFS[i] != null && TempSWFS[i].parent != null){
TempSWFS[i].parent.removeChild(TempSWFS[i]);
}
答案 2 :(得分:0)
好的,我解决了。我所做的是创建引用每个SWF文件的对象,并将它们全部放入一个数组中,同时引用一个跟踪应加载SWF的引用变量。该参考变量跟踪玩家所在游戏的当前区域,因此当玩家点击帮助按钮时,右侧SWF被加载并显示给他们,然后当他们点击退出时可以直接返回游戏。
谢谢大家帮助我。