AS3空间分区格子碰撞检测

AS3 的格子碰撞检测代码,挺适合做那种对象一多就掉帧的 2D 游戏。它用的是空间分区的思路,把整个场景切成一块块的小格子,每个对象丢进自己所属的格子里。更新的时候只查周围那几格,性能一下子就上去了,逻辑也清晰多了。

格子的大小可以自己定,太小会划太多块,太大又没优化效果。一般根据你游戏里对象的体积来定就行。比如像素风射击游戏那种,每个敌人都小小的,那格子就别太大。你可以用一个二维数组来表示格子地图,每个格子里存对象的引用。

碰撞的时候,直接查自己和邻近格子里的对象就行,效率比一股脑全查高太多。再配合边界框判断,基本够用了。代码里像MyCollisionGrid这种类,一般会封装好格子的增删查操作,用起来蛮方便。

如果你对象更新频繁,建议别老重建格子数据,用稀疏数组或对象池会省不少内存。还有,静态的对象(比如墙体)一次性加入就好,别每帧都重新。

,这种方法适合那种动态对象比较多、实时性要求高的场景,比如 2D 横版、塔防、模拟类游戏啥的。如果你在做这类项目,试试这个思路,应该能省不少性能。

你要是对更复杂的碰撞方式感兴趣,比如四叉树、像素级碰撞,我这也有几个链接,四叉树碰撞检测也挺好用的。

zip
MyCollisonGrid.zip 预估大小:21个文件
folder
MyCollisonGrid 文件夹
file
.actionScriptProperties 3KB
folder
bin-debug 文件夹
file
GridCollision3.html 5KB
file
swfobject.js 25KB
folder
history 文件夹
file
historyFrame.html 798B
file
history.css 365B
file
history.js 25KB
file
MyCollisonGrid.swf 4KB
file
MyCollisonGrid.html 5KB
file
GridCollision3.swf 4KB
file
playerProductInstall.swf 657B
folder
html-template 文件夹
file
index.template.html 5KB
file
swfobject.js 25KB
folder
history 文件夹
file
historyFrame.html 798B
file
history.css 365B
file
history.js 25KB
file
playerProductInstall.swf 657B
folder
.settings 文件夹
file
org.eclipse.core.resources.prefs 88B
folder
src 文件夹
file
Ball.as 1KB
file
MyGridCollision.as 4KB
file
MyCollisonGrid.as 3KB
file
.project 416B
zip 文件大小:52.4KB