나는 내 첫 프리 로더가 내 게임에서 결실을 맺게하려고 노력하고있다. 나는 꽤 많은 실험을했으며 여기에 내가 찾은 것이있다.액션 스크립트 3.0 ... 프리 로더가 작동하지 않습니다 ... 프레임 0에 갇혀 있습니까?
먼저 내 파일을 시뮬레이션 할 때 파일이 나타날 때까지 빈 흰색 화면이 표시됩니다 ... 실제로는 순간적으로 사용중인 큰 이미지 ... 완전히로드됩니다. 대역폭 프로파일 러를 사용하여 진행 상황을 확인했습니다. 적정 비율로 적재 중이며 적재 비율이 증가하는 것을 볼 수 있습니다. 불행히도 내 로더가 나타나지 않고 괴상한 점은 입니다. 프레임 0에 있습니다.. 왜 내가 이걸 말하고 있는지 모르겠다.
나는 그것을 고치려고 노력했다. 내 게임의 모든 무비 클립에 첫 번째 프레임을 내보내는 상자가 선택되어 있지 않은지, 내 프리 로더를 제외하고 문제가되지 않도록해야합니다. 또한 빈 .fla 파일을 만들고 단순히 프리 로더를 가져 와서 실행했습니다. 놀랍게도, 그것은 효과가 있었다! (다시 한 번 큰 이미지를로드했습니다). 나는 아무것도 바뀌지 않았다. ... 모두 같은 이름과 물건. 나는 왜 그 사람이 일할 것이고이 사람은 그렇지 않을 것이라고 생각하지 않습니다.
나의 타임 라인은 기본적으로 다음과 같습니다. 두 개의 레이어 : 첫 번째 레이어 첫 번째 프레임 액션은 stop();이라고 말합니다. 내 preloader도 내가 말한 것처럼 첫 번째 프레임에로드해야한다고 가정합니다. 로드가 끝나면 타임 라인을 통해 프레임 3으로 이동합니다. 여기서 내 기본 게임은 프레임 3의 액션을 넣기 시작해야합니다. 두 번째 레이어 두 번째 프레임로드하려는 이미지가 포함 된 MovieClip이 있습니다. 여기
내 "ThePreloader"클래스 내 문서 클래스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);
}
}
}
이며, 여기
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"));
}
}
}
대역폭 프로파일 러가 내가 프레임 0에 붙어 및 말해 왜 내 주요 혼란이다 거의 100 %로드 될 때까지. 따라서 프리 로더를 표시하지 않습니다 .... 감사합니다!
흠. 글쎄, 아직도 조금 혼란스러워. 내가 프레임 하나에 코드를 추가하여 enter_frame이 호출되도록 할 수 있다고 생각하십니까? 내가 그게 최선의 방법 tho .... 모르겠어요 어딘가에 내가() 호출 할 수있는 문서 클래스 어딘가에있다; 대신에? – spaderdabomb
ENTER_FRAME은 보통 초당 fps (일반적으로 30) 회 호출됩니다. 그 이벤트가 파견되면 진행 상황을 조사하는 데 사용할 수 있습니다.하지만 당신의 경우에는 의미 상으로 진행 이벤트를 청취해야합니다. – catholicon