【游客模式】——注册会员,加入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了。正事要紧啊兄弟们,你懂的。
|