[]LayaFlash针对资源的加载是同步还是异步?

已邀请:

cuixueying

赞同来自:

 是异步加载,当游戏运行时用到哪些资源就加载哪些资源,并不是一次性全部加载完毕。这样可以减少手机的内存和提高游戏运行的性能。
    由于LayaFlash实现的MovieClip并非在初始化的时候将资源全部加载,而是在需要的时候才加载,这会导致使用MovieClip对象时,有可能会因为首次播放动画,网速慢或图片较大等原因造成加载过程不连贯的不友好体验
,开发者可以采用LayaFlash提供的IFlash.preSwfAssets方法,通过预加载方式解决这个问题。
     package
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import fash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.net.URLRequest;

public class Main extends Sprite
{
public function Main():void
{
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);

this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.align = StageAlign.TOP_LEFT;

IFlash.setSize(1000, 600); //2D项目中设置场景尺寸
IFlash.setOrientationEx(1); //是否为横屏模式
IFlash.setBgcolor("#000000"); //背景色
IFlash.showInfo(false); //是否显示帧率

preSwfAssetsTest();
}

/**
* 测试预加载
*
*/
private function preSwfAssetsTest():void
{
var path:String = "assets/layaAsset.swf";
var path1:String = "assets/layaAsset1.swf";
IFlash.preSwfAssets([path,path1]);//这里开始调用预加载

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener
(Event.COMPLETE, layaAssetLoadComplete);
loader.load(new URLRequest(path));
}

private function layaAssetLoadComplete(event:Event):void
{
var loaderInfo:LoaderInfo = event.target as
LoaderInfo;
loaderInfo.removeEventListener(Event.COMPLETE,
layaAssetLoadComplete);
//code here.
}
}
}

   按如上示例即可完成资源预加载。这里特别提醒两点,一是预加载操 作必须放在资源执行加载的代码之前;二是预加载要谨慎使用,不能滥用。当预加载的资源过大的时候,也会造成加载等待时间长的问题,哪怕是多等待几秒,都会造成游戏用户的流失。因此,是否采用预加载,预加载的使用尺度,要根据游戏的实际情况来把握。

 

要回复问题请先

商务合作
商务合作