【游客模式】——注册会员,加入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
|