我有一个我用两个文件运行的游戏,一个是预加载器,另一个是swf。当我一起使用这两个文件时它们工作正常,但是一些闪存门户只需要一个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);
}
我已经在网上完成了大量的解决方案,但它们似乎都没有像我的代码设置方式那样工作,例如:How to create Preloader in AS3
我尝试使用我的文档类中的所有代码而不是包和构造函数并将其粘贴到第2帧中,然后返回“错误#1009:无法访问空对象引用的属性或方法”。 “对于舞台上项目的任何引用,例如:
mainRestartButton.addEventListener(MouseEvent.CLICK, RestartLevel);
正如他所提到的,“如果你以大部分资产(图像等)都在Flash IDE库中的方式组织你的项目并且没有在第一帧上加载(你可以在每个图书馆项目的属性)。“我的项目不是以这种方式组织的。
我最简单的方法是重新组织我的FLA /代码,以便他们可以在单个swf中拥有预加载器吗?
非常感谢您的时间和帮助!