1.格子地图
2.坐标转换
3.移动
4.动画的实现就是moveClip对象
http://edn.egret.com/cn/docs/page/596
程序使用MovieClip的方法
egret 的 MovieClip 采用工厂模式,MovieClip 工厂类为:MovieClipDataFactory
。
一个 MovieClip 工厂类对应一个MC资源合集。比如我们在 TextrueMerger 导出的MC资源合集文件为abc.json
和 abc.png
。那么我们就可以在程序中把其解析到一个 MovieClip 工厂类:
var data = RES.getRes("abc.json");
var txtr = RES.getRes("abc.png");
var mcFactory:egret.MovieClipDataFactory = new egret.MovieClipDataFactory( data, txtr );
我们之前提到过一个 MC 资源合集可以包含多个 MovieClip,一个 swf/gif 对应一个 MovieClip 。那么,如果我们把一个名为 mc1.swf 的 swf 文件打包到 MC 资源合集,其 MCID 为 mc1,则在程序中解析该 MovieClip 的方法为:
var mc1:egret.MovieClip = new egret.MovieClip( mcFactory.generateMovieClipData( "mc1" ) );
同样的,如果该 MC 资源合集还包含另外一个名为 mc2.swf 的资源,则可同样解析出该 MovieClip:
var mc2:egret.MovieClip = new egret.MovieClip( mcFactory.generateMovieClipData( "mc2" ) );
如果在MovieClip mc1 中有名为 “start” 的帧标签,我们希望从这里播放 3 次,代码即为:
this.addChild( mc1 );
mc1.gotoAndPlay( "start" ,3);
注意:为了避免可能的内存泄漏问题,MovieClip只有被加到显示列表上之后才能被正确的播放!
在h5项目中的代码为
var jsonData = RES.getRes(name+"_json");
var texture = RES.getRes(name+ "_png");
if(jsonData != null && texture != null){
acFactory = new egret.MovieClipDataFactory(jsonData,texture);
// 缓存动画数据
this.aniFactoryMap.put(resId,aniFactory);
<span style="white-space:pre"> </span>/**
* 获得动画的factory, factory中有动画描述json和纹理png
*/
getAniFactory(ani:FoxAni): egret.MovieClipDataFactory {
var resId:string = ani.resId;
if(!this.isResLoaded(resId)){
console.warn("animation resource has not loaded, " + resId);
}
var aniFactory = this.aniFactoryMap.get(resId);
if(!aniFactory){
var jsonData = RES.getRes(resId + "_json");
var texture = RES.getRes(resId+ "_png");
aniFactory = new egret.MovieClipDataFactory(jsonData,texture);
if(ani.aniCache){ // 缓存动画数据
this.aniFactoryMap.put(resId,aniFactory);
}
}
return aniFactory;
}
/** 移除动画缓存 */
removeAniFactory(resId:string):void{
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>let value = this.aniFactoryMap.remove(resId);
<span style="white-space:pre"> </span>value = null;
}
/** 获取动画数据 */
getAniData(ani:FoxAni):egret.MovieClipData{
<span style="white-space:pre"> </span>return this.getAniFactory(ani).generateMovieClipData(ani.mcName);
}
$mcObject: egret.MovieClip = null;
ani.$mcObject.movieClipData = this.getAniData(ani);
this.$mcObject.gotoAndPlay(this.frameName, this.totalPlayCount);
<span style="white-space:pre"> </span>public playWithDirection(){
// this.Complete();
if(this.isRepeat){
this.action.frameName = this.id + "_" + this.direction;
this.action.play(this.id,this.id,-1);
}else{
this.action.frameName = this.id + "_" + this.direction;
this.action.play(this.id,this.id,1);
}
}
资源获取 RES.getRes(name+"_json");
are module egret {
/**
* @classdesc 使用 MovieClipDataFactory 类,可以生成 MovieClipData 对象用于创建MovieClip
* @see http://edn.egret.com/cn/docs/page/596 MovieClip序列帧动画
* @version Egret 2.4
* @platform Web,Native
*/
class MovieClipDataFactory extends EventDispatcher {