Egret之MC逐帧动画

此处Egret逐帧动画借助Flash以及Texture Merger工具来生成文件( 1:动画描述文件Json , 动画图集文件 )

本人以一只飞行的鸟为例

先看Flash , 如下

flash的项目名称为 fly.fla

舞台帧信息 , A 和 B为帧标签

打开texture merger , 选择egret movieclip 。将fly.swf拖入到编辑区 , 取名Bird , 如下:

导出动画文件 , json 和 png图集

为导出文件取名:

我们看看mc_test.json文件如下:

{"mc":{
 "fly":{
  "frameRate":24,
  "labels":[
   {"name":"A","frame":1,"end":3}
   ,{"name":"B","frame":4,"end":8}
   
   ],
  "events":[
   
   ],
  "frames":[
   
   {
   "res":"3E7A5975",
   "x":-67,
   "y":-24
   },
   {
   "res":"521E77D1",
   "x":-67,
   "y":-21
   },
   {
   "res":"4A0EE357",
   "x":-73,
   "y":-24
   },
   {
   "res":"34630D9E",
   "x":-71,
   "y":-36
   },
   {
   "res":"175B90A8",
   "x":-74,
   "y":-29
   },
   {
   "res":"4BC2B418",
   "x":-74,
   "y":-44
   },
   {
   "res":"A49D29C2",
   "x":-76,
   "y":-40
   },
   {
   "res":"B1A21F34",
   "x":-73,
   "y":-19
   }
   ]
}},
 "res":{
  "34630D9E":{"x":1,"y":1,"w":136,"h":77},
  "521E77D1":{"x":280,"y":62,"w":122,"h":61},
  "3E7A5975":{"x":142,"y":121,"w":123,"h":56},
  "4A0EE357":{"x":139,"y":1,"w":136,"h":59},
  "175B90A8":{"x":139,"y":62,"w":139,"h":57},
  "B1A21F34":{"x":267,"y":125,"w":139,"h":41},
  "A49D29C2":{"x":1,"y":121,"w":139,"h":53},
  "4BC2B418":{"x":277,"y":1,"w":136,"h":59}
 }}

解释如下:

在项目中实现此MC的播放

核心代码:

  protected childrenCreated():void{
   super.childrenCreated();
   this.txt_name.text = "Snow";
   this.img_dragon.source = RES.getRes("egret_icon_png");
   //this.playDragonEff();
            this.ayncLoad2Mc("mc_test_json");
  }
        private ayncLoad2Mc( resname : string) : void{
            var self = this;
            RES.getResAsync(resname,
                function(data: any,key: string): void {
                    if(key == "mc_test_json") {
                        self.ayncLoad2Mc("mc_test_png");
                    }
                    else if(key == "mc_test_png") {
                        this.playMC();
                    }
                },
                this);
        }
        private playMC() : void{
            var data2mc = RES.getRes("mc_test_json");
            var texture2mc = RES.getRes("mc_test_png");
            let mcFactory : egret.MovieClipDataFactory = new egret.MovieClipDataFactory(data2mc,texture2mc);
            let mc:egret.MovieClip = new egret.MovieClip(mcFactory.generateMovieClipData("fly"));
            mc.gotoAndPlay("A",-1);//"A" : 标签 -1 : 循环播放
            this.addChild(mc);
            mc.x = 200;
            mc.y = 400;
        }

结果:

解释:

帧事件标签

mc.addEventListener(egret.MovieClipEvent.FRAME_LABEL,(e:egret.MovieClipEvent)=>{
   console.log(e.type,e.frameLabel,mc.currentFrame);},this);

每一轮循环播放完毕触发

mc.addEventListener(egret.Event.LOOP_COMPLETE, (e:egret.Event)=>{
   console.log(e.type);}, this);

完全播放完毕触发

mc.addEventListener(egret.Event.COMPLETE, (e:egret.Event)=>{
   console.log(e.type);}, this);

时间: 2025-01-02 13:28:53

Egret之MC逐帧动画的相关文章

逐帧动画-AnimationDrawable的简单用法

将Animation设置为ImageView的backgrond即可 MainActivity.java: import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget

window.requestAnimationFrame() ,做逐帧动画,你值得拥有

window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画.该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用. 如果你想做逐帧动画的时候,你应该用这个方法.这就要求你的动画函数执行会先于浏览器重绘动作.通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率.如果是后台标签页面,重绘频率则会大大降低. 基本语法: requestID = window.requestAnimatio

实现逐帧动画和补间动画两种动画效果

1.逐帧动画(Frame Animation)通常在Android项目的res/drawable/目录下面定义逐帧动画的XML模板文件.编码的时候,需要在动画模板文件的<animation-list>标签中依次放入需要播放的图片,并设置好播放的间隔时间. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"

android 逐帧动画的播放与播放结束操作对象

逐帧动画的xml代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 3 android:oneshot="true" > 4 5 <item 6 android:drawable="@drawabl

Android中的动画具体解释系列【1】——逐帧动画

逐帧动画事实上非常easy,以下我们来看一个样例: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawa

Esfog_UnityShader教程_逐帧动画

有段日子没出这个系列的新文章了,今天就拿一个比较常见也比较基础的利用改变Shader来改变不断调整UV实现播放逐帧动画的小功能.很久没写了就当练练手了.在新版本的Unity中早就已经集成了Sprite2D的功能,而且可以编辑不规则的图形,不过了解一下它的原理,也是蛮好的! 逐帧动画 帧动画大家应该都不陌生,经常会看到把一个动画几帧的的状态按一定顺序整合在同一张图片上,如下图: 从上图中我们可以看出,这个图片动画一共有20帧,从左到右,从上到下依次排布(基本上都是这个规律).为了展示效果我们需要一

Android -- 逐帧动画

在处理耗时工作的时候,大多数会弹出一个加载的框,里面有一个连续旋转的图片,很多时候都是用一张图片,使用rotate来设定旋转,不过看起来不太美观,没有形象感,在3.0之前Android有两种动画效果分别是补间动画和帧动画,用一张图片实现的是使用补间动画,定义给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变. 动画布局                                                                               

Android Animation 动画Demo(Frame逐帧动画)

上一篇介绍了Animation动画其一:Tween补间动画. 这篇文章接下来介绍Animation另一种动画形式:Frame逐帧动画. Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现(后面会给出这两种实现方式的源代码Demo). 下面分别介绍: 一.定义在xml中实现: 实现效果图: 源代码: 布局文件:main.xml: <?xml version="1.0" encodin

css3 实现逐帧动画

实现逐帧动画需要使用到的是Animation动画,该CSS3的Animation有八个属性:分别是如下:1: animation-name2: animation-duration3: animation-delay4: animation-iteration-count5: animation-direction6: animation-play-state7: animation-fill-mode8: animation-timing-function 含义分别如下:animation-n