我制作了一个游戏,它在两个文件中运行,一个是预加载器,一个是 swf。当我将这两个文件一起使用时,它们可以正常工作,但是一些 Flash 门户只需要一个 SWF,所以我试图找到一种最短路径的方法来将其转换为只使用一个。
游戏 swf 使用包含包、类构造函数和大量函数的文档类,并且运行良好。我在我的代码中引用的舞台上有很多电影剪辑。代码是这样的(删节):
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
...
public class Game extends MovieClip {
var EnemyArray:Array;
var HeroArray:Array;
...
public function Game() { // class constructor
EnemyArray = new Array();
addEventListener(Event.ENTER_FRAME,onEnterFrame);
mainRestartButton.addEventListener(MouseEvent.CLICK, RestartLevel);
...
}
public function KeyPressed(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.SPACE)
{
attack();
...
}
} // End of class
} // End of package
我还有另一个 swf,我的预加载器,它在第 1 帧中有以下代码:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.ProgressEvent;
import flash.events.Event;
var myLoader:Loader = new Loader();
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoading);
var myURL:URLRequest = new URLRequest("Game.swf");
myLoader.load(myURL);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
function onLoading(event:ProgressEvent):void {
var loaded:Number = event.bytesLoaded / event.bytesTotal;
percent_txt.text = "Loading: " + (loaded*100).toFixed(0) + "%";
}
function onComplete(event:Event):void {
myLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onLoading);
myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
this.addChild(myLoader);
}
我已经在线浏览了各种各样的解决方案,但它们似乎都不适用于我的代码设置方式,例如:如何在 AS3 中创建预加载器
我尝试了他的选项 1,将我的文档类中的所有代码(包和构造函数除外)粘贴到第 2 帧中。但是它返回“错误 #1009:无法访问空对象引用的属性或方法”。对舞台上项目的任何引用,例如:
mainRestartButton.addEventListener(MouseEvent.CLICK, RestartLevel);
正如他所提到的,“如果您以大多数资产(图像等)都在 Flash IDE 库中并且没有在第一帧加载(您可以在每个库项目的特性)。” 我的项目不是以这种方式组织的。
对我来说,重组我的 FLA/代码以便他们可以在单个 swf 中拥有预加载器的最简单方法是什么?
非常感谢您的时间和帮助!