首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >框架0中的Actionscript 3.0...Preloader而不是working....Stuck?

框架0中的Actionscript 3.0...Preloader而不是working....Stuck?
EN

Stack Overflow用户
提问于 2013-07-14 12:48:02
回答 1查看 280关注 0票数 0

我正试着让我的第一个预装载机在我的游戏中取得成果。我做了很多实验,下面是我的发现。

首先,当我模拟我的文件时,我只是得到一个空白的白屏幕,直到file...or实际上只是一个大的图像,我使用am moment...is完全加载。我用带宽分析器来检查到底发生了什么。它是以一个适当的速度加载,我可以看到加载百分比增加。不幸的是,我的加载程序没有出现,奇怪的是它是,它说它在框架0中。我不知道它为什么要告诉我这个。

我为修复它所做的一切。我已经确保我的游戏中的每个电影都有导出第一帧的框是未选中的,除了我的预加载程序,所以这不应该是问题。我还创建了一个空白的.fla文件,只需将预加载器导入其中并运行它。令人惊讶的是,它成功了!(再次,刚刚加载了一个大图像)。我没有改变anything....all相同的名字和东西。我不知道为什么那个会起作用,而这个就不行。

我的时间线基本上如下:两层:第一层,第一层,第一帧动作,表示停止();我假设我的预加载程序应该加载到第一个帧上,就像我告诉它的那样。完成加载后,它会通过时间线运行到第3帧,在这里,我的主要游戏应该开始运行,因为我也加入了第3帧的操作。第二层第二帧我有一个MovieClip,其中包含了我希望它加载的图像。

这是我的文档类

代码语言:javascript
复制
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“课程

代码语言:javascript
复制
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%加载。因此,永远不会显示preloader....thank您!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-14 14:09:42

我认为你的预加载器应该听LoaderInfo进度事件的。从那以后,你就停止执行死刑了,我不认为ENTER_FRAME会给你打电话。另外,AFAIR、单帧电影是由播放器专门处理的,播放器定期为它们发送ENTER_FRAME。也许,这就是您测试应用程序的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17639520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档