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

搜索
查看: 2149|回复: 0
上一主题 下一主题

[AS 开发 & 技巧] 【9RIA—iloveas】— AS3游戏实用技巧(9):一行代码优化取余数的运行效率

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

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

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

x
本帖最后由 TKCB 于 2018-12-14 13:51 编辑

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


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



谈到数学计算的优化,大家都会很自然地想到位运算,以求模(取余数)为例,如果除数是2的整数次方(即2,4,8,16,32.....这一系列的数),就可以用位运算代替%运算符,例如判断正整数n是否为2的倍数就可以这么写:

[Actionscript3] 纯文本查看 复制代码
if(n & 1 == 0)


同理,求n除以4的余数也可以写成:

[Actionscript3] 纯文本查看 复制代码
n & 3


以此类推,可得
n % 8 = n & 7
n % 16 = n & 15
n % 32 = n & 31
......

可见当除数为2的整数次方时,我们可通过以下公式求余数使其运算速度更快:

n % 除数 = n & (除数 - 1)

但如果除数不满足以上公式的条件,那就还得用回效率不高的%运算。

事实上,之所以效率不高,是因为这个取余运算相当强大,它甚至支持小数求模:

[Actionscript3] 纯文本查看 复制代码
trace(7.7 % 2.4); //返回0.5000000000000004(准确值为0.5,输出值最后面的4是精度损失的结果)


而大多数情况下我们都不会用到小数,此时用%来计算就未免有点屈才了。为此,在确保被除数和除数都是正整数的情况下,iloveas给出一个通用的优化公式:
游客,如果您要查看本帖隐藏内容请回复

在iloveas的电脑上测试,此法的效率比%高出一倍左右,对于运算量大,运算频率也高的游戏来说,这样的优化效果已经很不错了。


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

本版积分规则

关闭

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



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