11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 5757|回复: 15
上一主题 下一主题

[AS 开发 & 技巧] 【9RIA—iloveas】— AS3游戏实用技巧(10):一行代码让MC播放完成事件更加优雅

[复制链接] TA的其它主题
发表于 2018-12-14 10:59:21 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2019-3-19 09:11 编辑

转载:9RIA游戏开发者社区(天地会)
作者:iloveas(大神)


总目录:[原创]AS3游戏开发实用技巧汇总



今天4月30号,提前祝9ria的兄弟姐妹们五一快乐!

虽然现在越来越多的朋友使用Starling或者BitmapData来实现游戏里的动画播放,但既然昨天有版主问到了原生MovieClip的东东,那我还是来给大家分享一下。

在回合制战斗游戏中,一般都有多个动作连播的过程,为了实现各动画之间的无缝连接,我们希望一个动画播放结束后就开始播放下一个动画的第一帧。那么,如何判断MovieClip播放完成,也就是跑到最后一帧呢?大家很自然地会想到在MC的最后一帧发送一个自定义事件,然后在外面监听它。

没错,这办法确实很好,但如果动画数量很多(好像大部分页游都这样),那逐个添加就显得相当麻烦了,而且项目一旦重构,这些散布于不同MC上的帧代码估计就要“呵呵”了。

对于这样的体力活,用JSFL也不失为一个好方法。不过这在实际开发中也比较蛋疼。毕竟美术和程序同时操作一个文件,出问题的几率比较大。

为了避免维护问题以及各种冲突,程序员们都希望找到一个方法让代码和界面分离的更彻底。但很不幸,原生的MovieClip并未提供播放完成事件。如果不想在帧上写代码,那大家可能会倾向于用enterFrame进行判断:

[Actionscript3] 纯文本查看 复制代码
    mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    function enterFrameHandler(event:Event){
      if(mc.currentFrame == mc.totalFrames){
        //播放完毕
      }
    }


此法每帧都要监听,导致我们都对其运行效率非常担忧。而事实上,我们有更简单的方法:
游客,如果您要查看本帖隐藏内容请回复

虽然我看很多人都知道这一用法,但我还是偷偷地把这部分代码给隐藏起来。

那么新的问题来了,受传参等因素的影响,此法有一定的局限性,无法得知到底是哪个MC播放完成,所以无法通过循环批量添加,这显然限制了该方法的应用。

所以iloveas在此基础上封装了一个类,大致思路如下:
游客,如果您要查看本帖隐藏内容请回复

思路给了,具体的可以根据实际情况作进一步的完善。

补充一下题外话:MovieClip之所以效率不如bitmap,其实都是swf文件格式惹的祸。相信大神们都已经发表过相关的帖子,我就不在这儿班门弄斧了。

明天五一了,iloveas打算休息一下,也希望大家明天先别上来支持iloveas了。正事要紧啊兄弟们,你懂的。



发表于 2018-12-14 12:58:52 | 显示全部楼层
什么方法
回复

使用道具 举报

发表于 2018-12-14 13:00:08 | 显示全部楼层
什么方法
回复

使用道具 举报

发表于 2018-12-14 14:33:58 | 显示全部楼层
什么方法?
回复

使用道具 举报

发表于 2019-1-10 12:07:45 | 显示全部楼层
收藏学习
回复

使用道具 举报

发表于 2019-1-10 13:46:48 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2019-1-24 19:56:54 | 显示全部楼层
提示信息关闭
抱歉,您目前处于见习期间,需要等待 3 分钟后才能进行本操作
回复

使用道具 举报

发表于 2020-4-16 09:21:53 | 显示全部楼层
来和大佬们学习学习了
回复

使用道具 举报

发表于 2020-4-16 09:22:56 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2020-4-21 20:09:27 | 显示全部楼层
我不知道
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表