Nieyt's Blog

egret MovieClip怎样在某一帧停止播放

字数统计: 293阅读时长: 1 min
2019/04/03 Share

MovieClip对象的方法中,并没有提供这样的api,但我们可以通过为动画的某一帧添加事件,再在代码中监听该事件,调用停止方法即可。具体如下——

步骤一

在生成的动画数据json中,在events数组里添加对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"mc": {
"dog_action0": {
"frameRate": 25,
"events": [
// 添加在这里 ->
{
"name": "@stop", // 事件名
"frame": 1 //事件发生所在帧
}, {
"name": "@fall",
"frame": 2
}
// <- end
],
"frames": [
{
"res": "1_00000",
"x": 6,
"y": 10
},
...
]
},
...
}
}

步骤二

在代码中监听FRAME_LABEL事件,监听到指定事件名,让动画停止。

1
2
3
4
5
this.mc.removeEventListener(egret.MovieClipEvent.FRAME_LABEL, function (e:egret.TouchEvent):void {
if (e.frameLabel == "@stop") {
this.mc.stop();
}
}, this)

或者

如果想给任意帧添加暂停事件,我们也可在events数组中给每一帧都加上事件,像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"events": [
{
"name": "@stop", // 事件名
"frame": 1 //事件发生所在帧
}, {
"name": "@stop",
"frame": 2
}, {
"name": "@stop",
"frame": 3
},
...
],
}

然后,再在代码中监听FRAME_LABEL事件,判断当前帧数即可。

1
2
3
4
5
6
let anyFrame = 3;
this.mc.removeEventListener(egret.MovieClipEvent.FRAME_LABEL, function (e:egret.TouchEvent):void {
if (this.mc.currentFrame == anyFrame) {
this.mc.stop();
}
}, this)

end

CATALOG
  1. 1. 步骤一
  2. 2. 步骤二
  3. 3. 或者