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

搜索
查看: 2610|回复: 4
上一主题 下一主题

[AS 开发 & 技巧] 【9RIA—iloveas】— AS3游戏实用技巧(24):一行另类的图片翻转代码

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

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

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

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

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


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




图片翻转是2D横版类游戏很常见的需求,如果对细节要求不太高,那么美术在绘制人物动作的时候就只需绘制一个方向,另一个方向则只要水平翻转一下就可以了(水平翻转后,光影的细节可能会跟光照方向相反,从而导致效果不真实,但大多数游戏都不太讲究这个)。

对于面向非Stage3D的游戏来说,要实现翻转,一般都通过scaleX=-1和draw两种方式。今天iloveas给大家讲讲draw,这种方法用起来有点麻烦,因为以下这种做法:

[Actionscript3] 纯文本查看 复制代码
bitmapData.draw(bitmapData, new Matrix(-1, 0, 0, -1, bitmapData.width, bitmapData.height));


对于透明图片来说会有个问题,就是翻转后的图像会直接叠加到翻转前的像素上,翻转前的内容的不会因此而被擦除,所以我们还得创建副本:

[Actionscript3] 纯文本查看 复制代码
    var temp:BitmapData = bitmapData.clone();
    bitmapData.fillRect(bitmapData.rect, 0x00000000);
    bitmapData.draw(temp, new Matrix(-1, 0, 0, -1, bitmapData.width, bitmapData.height));


现在,iloveas通过一行神奇的代码来实现这样的翻转:
游客,如果您要查看本帖隐藏内容请回复
虽然简化成了一行,但是效率却比draw差了不少,执行速度只有原来的1/3。

而且还有一个问题,就是这行代码会同时在水平和竖直方向上翻转,想要单独翻转一个方向,代码反倒要多写几行,并且效率会变得更加低下。


PS:转到其他语言上,此法的效率可能会比Matrix变换高一些。

所以它不适合直接用在AS3的游戏里面,但这行代码胜在足够的神奇和另类,非常适合用来装逼,也可以帮助程序员拓展发散思维,对程序员自身的成长来说,其实用价值已经达到了回复可见的级别,然后,就没有然后了。


发表于 2018-12-27 11:21:48 | 显示全部楼层
666 看一下                    
回复

使用道具 举报

发表于 2020-10-12 10:38:14 | 显示全部楼层
看看这一行神奇的代码
回复

使用道具 举报

发表于 2022-1-11 17:22:34 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2022-6-17 14:38:44 | 显示全部楼层
               
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /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)



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