Animation 的createFrames 使用已经加载的图集缓存动画失败

我load图集之后, 使用Animation的createFrames缓存动作, api里写着可以使用已经加载的图集动画,结果却又去下载了,地址当然不正确了,导致无法下载.代码大致如下:
Laya.loader.load('player/player.json',Laya.Handler.create(this, this.onLoaded),null);
----onComplate:
Laya.Animation.createFrames(['player-left.png'], "walk-left");

已邀请:

kitechasingkid

赞同来自: Monica nimo

特意注册了个账号来回复,我也遇到了类似问题,看了下源代码终于调通了
 
(1)chrome默认是不允许加载本地json文件的,所以如果你用chrome打开file开头的链接,json是加载不了的,我为了调试还起了个http服务。

(2)加载动画时地址是有要求的,见以下代码片段(laya.net.Loader):
var directory:String = (this._data.meta && this._data.meta.prefix) ? URL.basePath + this._data.meta.prefix : this._url.substring(0, this._url.lastIndexOf(".")) + "/";
var url:String = directory + name;
loadedMap[url] = Texture.create(tPic, obj.frame.x, obj.frame.y, obj.frame.w, obj.frame.h, obj.spriteSourceSize.x, obj.spriteSourceSize.y, obj.sourceSize.w, obj.sourceSize.h);
如果你的json文件中没有meta.prefix,那么地址与json文件的位置有关,比如你的json文件的地址是res/package.json,那么每张小图的地址为res/package/<小图的文件名>;
如果你的json文件中有meta.prefix,那么地址则为URL.basePath + prefix + <小图的文件名>。
这个文档里讲的不是很清楚,建议补充下。

(3)我是一开始就拿到拼接好的图片的,所以反而写了个简单脚本去生成json文件,建议这个可以作为小工具加到IDE中。

cuixueying

赞同来自:

@awen1983你好、
    关于createFrames的用法我们又实测了一遍,并未发现你所表达的问题,如果可以的话可以将您有错误的源码以附件的形式上传,我们好方便快速的查找问题。
    
public class Animation_Altas
{
private const AniConfPath:String = "res/fighter/fighter.json";
private var fly:Animation;
public function Animation_Altas()
{
// 不支持WebGL时自动切换至Canvas
Laya.init(Browser.clientWidth, Browser.clientHeight, WebGL);
Laya.loader.load(AniConfPath, Handler.create(this, createAnimation), null, Loader.ATLAS);
}

private function createAnimation():void
{
var url:Array=;
for(var i:int=1;i<30;i++)
{
if(i<10)
{
url.push("res/fighter/fighter/rollSequence000"+i+".png");
}
else
{
url.push("res/fighter/fighter/rollSequence00"+i+".png");
}
}
Animation.createFrames(url,"myFighter");

fly=new Animation();
Laya.stage.addChild(fly);
fly.play(0,true,"myFighter");
}
}


其他案例请参考:LayaAir开发实战-------Role.as文件也有相关使用方式,仅供参考。
 

要回复问题请先

商务合作
商务合作