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

搜索
查看: 2389|回复: 5
上一主题 下一主题

[鼠标交互] 【9RIA—iloveas】— AS3游戏实用技巧(8):一行代码瞬间提升鼠标精确碰撞的效率

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

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

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

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

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


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



说白了,这东西可以理解为鼠标穿透,即屏蔽图片透明区域的鼠标响应。相信大家对这样的需求都已经比较熟悉了,毕竟游戏开发里很多场合都会用到。

AS3的BitmapData提供了像素级的hitTest方法,但由于它的应用领域主要是两位图的碰撞检测(事实上还可以用它来检测位图跟点或者矩形的碰撞),所以对于鼠标跟位图的碰撞来说就未免有点大材小用了,而且还会造成不必要的性能损耗。因此大多数情况下,大家都更习惯于用bitmapData.getPixel32来代替以上方法。

殊不知getPixel32的执行效率也是相当的慢,我们可以写个代码来测试一下:

[Actionscript3] 纯文本查看 复制代码
    var bd:BitmapData = new BitmapData(1000, 1000, true, 0x80000000);
    var now:int = getTimer();
    for(var j:int = 0, h:int = bd.height; j < h; j ++){
            for(var i:int = 0, w:int = bd.width; i < w; i ++){
                    var pixel:uint = bd.getPixel32(i, j);
            }
    }
    trace(getTimer() - now);


遍历这1000*1000个像素,在iloveas的机器上花费了51毫秒的时间,如果游戏对性能要求比较高,那这个方法可能就不太合适了。

其实,除了getPixel32以外,我们还可以通过以下方法来实现同样的功能:
游客,如果您要查看本帖隐藏内容请回复

就这样,仅仅加入了一行代码,执行的时间就瞬间缩短到12毫秒,很厉害了有木有?!
其实吧,此法要以牺牲内存为代价,所以如果内存吃紧的话就还是得慎重考虑了,虽然内存的价钱要比cpu便宜不少。

今天本来有更好的心得分享给大家,无奈有些东西死活折腾不出来,就先来篇这个吧,估计大家还有机会用得上。

经过1周左右的折腾,iloveas已经习惯了回复可见,不然晚上睡不着。所以,为了让大家明天还能继续看到iloveas写的教程,我还是继续隐藏部分代码好了,还望大家多多包涵,谢谢!!



TKCB:
这里是根据格美大神教程做的代码练习:
http://www.11ria.com/forum.php?mod=viewthread&tid=1591
发表于 2019-1-14 22:03:35 | 显示全部楼层
看看代码!!!
回复

使用道具 举报

发表于 2019-1-15 09:28:26 | 显示全部楼层
支持一下
回复

使用道具 举报

发表于 2021-12-23 23:49:16 | 显示全部楼层
看看代码大佬!!!!!
回复

使用道具 举报

发表于 2022-1-4 17:00:49 | 显示全部楼层
看看代码大佬!!!!!
回复

使用道具 举报

发表于 2022-3-7 16:11:21 | 显示全部楼层
1111111111111111111111111
回复

使用道具 举报

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

本版积分规则

关闭

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



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