Actionscript 3 Actionscript 3.0…预加载程序不工作…卡在第0帧中?
我正在努力让我的第一个预装器在我的游戏中实现。我做了很多实验,下面是我的发现 首先,当我模拟我的文件,我只是得到一个空白的白色屏幕,直到文件…或者实际上只是一个大的图像,我正在使用的时刻…是完全加载。我使用带宽分析器来检查发生了什么。它正在以适当的速度加载,我可以看到加载百分比在增加。不幸的是,我的加载程序没有出现,奇怪的是,它说它在第0帧中。我不知道它为什么告诉我这些 我做了些什么来修复它。我已经确保我游戏中的每一个movieclip在第一帧上都有导出框,除了我的预加载程序外,其他都没有被选中,所以这应该不是问题所在。我还创建了一个空白的.fla文件,并简单地将预加载程序导入其中并运行它。令人惊讶的是,它成功了!(再次,刚刚加载了一个大图像)。我没有改变任何东西……都是相同的名字和东西。我不知道为什么那个能用,而这个不行 我的时间线基本上如下:两层:第一层第一帧动作表示stop();。我认为我的预加载程序应该像我告诉它的那样加载到第一帧。一旦完成加载,它将通过时间线运行到第3帧,在那里我的主游戏应该开始运行,因为我也加入了第3帧的动作。第二层第二帧我有一个MovieClip,其中包含我希望加载的图像 这是我的文档类Actionscript 3 Actionscript 3.0…预加载程序不工作…卡在第0帧中?,actionscript-3,preloader,Actionscript 3,Preloader,我正在努力让我的第一个预装器在我的游戏中实现。我做了很多实验,下面是我的发现 首先,当我模拟我的文件,我只是得到一个空白的白色屏幕,直到文件…或者实际上只是一个大的图像,我正在使用的时刻…是完全加载。我使用带宽分析器来检查发生了什么。它正在以适当的速度加载,我可以看到加载百分比在增加。不幸的是,我的加载程序没有出现,奇怪的是,它说它在第0帧中。我不知道它为什么告诉我这些 我做了些什么来修复它。我已经确保我游戏中的每一个movieclip在第一帧上都有导出框,除了我的预加载程序外,其他都没有被选中
package com.classes
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.display.Sprite;
import flash.events.Event;
public class DocumentClass extends MovieClip
{
private var preloader:ThePreloader;
public static var enemyList1:Array = new Array();
// moved stickobject1 to a class variable.
private var stickobject1:Stickman2;
private var scoreHud:ScoreHud;
public function DocumentClass() : void
{
preloader = new ThePreloader(390, this.loaderInfo);
stage.addChild(preloader);
preloader.addEventListener("loadComplete", loadAssets);
preloader.addEventListener("preloaderFinished", showSponsors);
var bg1:background1 = new background1();
stage.addChild(bg1);
stickobject1 = new Stickman2(stage);
stage.addChild(stickobject1);
stickobject1.x=50;
stickobject1.y=300;
//running a loop now.... so we can keep creating enemies randomly.
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
stickobject1.addEventListener("hit", stickobject1Hit, false, 0, true);
scoreHud = new ScoreHud(stage); //create our HUD
stage.addChild(scoreHud); //and display it.
}
private function loadAssets(e:Event) : void
{
this.play();
}
private function showSponsors(e:Event) : void
{
stage.removeChild(preloader);
trace("show sponsors");
}
//our loop function
private function loop(e:Event) : void
{
//run if condition is met.
if (Math.floor(Math.random() * 40) == 5)
{
//create our enemyObj1
var enemyObj1:Enemy1 = new Enemy1(stage, stickobject1);
//listen for enemyObj1 being removed from stage
enemyObj1.addEventListener(Event.REMOVED_FROM_STAGE, removeEnemyObj1, false, 0, true);
enemyObj1.addEventListener("killed", enemy1Killed, false, 0, true);
enemyList1.push(enemyObj1);
stage.addChild(enemyObj1);
}
}
private function enemy1Killed(e:Event) : void
{
scoreHud.updateKills(1); //add 1 to enemy kills
scoreHud.updateScore(e.currentTarget.points); //add that points variable we created earlier
}
private function stickobject1Hit(e:Event) : void
{
scoreHud.updateHits(1); //add 1 to number of hits
}
private function removeEnemyObj1(e:Event)
{
enemyList1.splice(enemyList1.indexOf(e.currentTarget), 1);
}
}
}
这是我的“ThePreloader”课程
我的主要困惑是为什么带宽分析器告诉我我被困在第0帧,直到它几乎100%加载。因此,永远不要显示预加载程序…谢谢 我认为你的预加载程序应该在听。因为,你已经停止了执行,我不认为你会被要求进入框架。
此外,播放机对AFAIR、单帧电影进行特殊处理,播放机定期为其发送ENTER_帧。很可能,这就是您测试应用程序的原因。Hmmm好的。我还是有点困惑。我的意思是,我想我可以在第一帧中添加一组代码,以确保调用enter\u frame?我不确定这是不是最好的方法……文档类中是否有我可以调用stop()的地方;相反,输入帧通常每秒被称为“fps(通常为30)”次。如果该事件被调度,则可用于轮询进度。。。但是,在你们的情况下,我会说,从语义上来说,你们应该在听事件的进展。
package com.classes
{
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.events.*;
public class ThePreloader extends MovieClip
{
private var fullWidth:Number; //the width of our mcPreloaderBar at 100%
public var ldrInfo:LoaderInfo;
public function ThePreloader(fullWidth:Number = 0, ldrInfo:LoaderInfo = null)
{
this.fullWidth = fullWidth;
this.ldrInfo = ldrInfo;
addEventListener(Event.ENTER_FRAME, checkLoad);
}
private function checkLoad (e:Event) : void
{
if (ldrInfo.bytesLoaded == ldrInfo.bytesTotal && ldrInfo.bytesTotal != 0)
{
//loading complete
dispatchEvent(new Event("loadComplete"));
phaseOut();
}
updateLoader(ldrInfo.bytesLoaded / ldrInfo.bytesTotal);
}
private function updateLoader(num:Number) : void
{
//num is a number between 0 and 1
mcPreloaderBar.width = num * fullWidth;
}
private function phaseOut() : void
{
removeEventListener(Event.ENTER_FRAME, checkLoad);
phaseComplete();
}
private function phaseComplete() : void
{
//go on to the next phase
dispatchEvent(new Event("preloaderFinished"));
}
}
}