关于动画。

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 工厂类:

 
 
  1. var data = RES.getRes("abc.json");
  2. var txtr = RES.getRes("abc.png");
  3. var mcFactory:egret.MovieClipDataFactory = new egret.MovieClipDataFactory( data, txtr );

我们之前提到过一个 MC 资源合集可以包含多个 MovieClip,一个 swf/gif 对应一个 MovieClip 。那么,如果我们把一个名为 mc1.swf 的 swf 文件打包到 MC 资源合集,其 MCID 为 mc1,则在程序中解析该 MovieClip 的方法为:

 
 
  1. var mc1:egret.MovieClip = new egret.MovieClip( mcFactory.generateMovieClipData( "mc1" ) );

同样的,如果该 MC 资源合集还包含另外一个名为 mc2.swf 的资源,则可同样解析出该 MovieClip:

 
 
  1. var mc2:egret.MovieClip = new egret.MovieClip( mcFactory.generateMovieClipData( "mc2" ) );

如果在MovieClip mc1 中有名为 “start” 的帧标签,我们希望从这里播放 3 次,代码即为:

 
 
  1. this.addChild( mc1 );
  2. 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 {


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值