关于动画。

来源:互联网 发布:mac 鼠标指针小手 编辑:程序博客网 时间:2024/04/28 10:48

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
原创粉丝点击