大规模网格形碰撞检测

该博客探讨了一种基于网格的碰撞检测方法,通过将屏幕分割为多个格子来减少碰撞检测的计算量。内容提及在ActionScript3.0高级动画教程中找到的灵感,并介绍了基本思路:将物体分配到对应格子,仅检测相邻格子间的碰撞,避免无效计算。尽管在100个方块时表现流畅,但当方块数量增加到130以上时,性能开始下降,作者认为存在进一步优化的空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

场景中有大小完全相同的100个正方体,且坐标一直在舞台内变化,请判断它们是否两两相撞。
 

先上效果图,用的网格型碰撞检测方法,参考了ActionScript3.0 高级动画教程 就是参考里面的做法。大概思路就是把屏幕分隔,根据坐标把物体放进不同的格子内,碰撞检测的时候遍历格子,首先进行格子内部物体的碰撞检测,然后检测格子内每个物体与周边格子物体的检测,至于周边之外的格子因为是碰撞不了的 所以也无需检测,主要是在这里节省了碰撞和循环次数。

 

 

下面是代码:

package 
{
	import flash.display.MovieClip;
	import classes.*;
	
	
	/**
	 * ...
	 * @author fengsser
	 */
	public class Main extends MovieClip
	{
		//[SWF(width = "550", height = "400", backgroundColor = "0x000000", frameRate = "30")]
		public function Main() {
			var game:Game = new Game(this.stage);
			
			
		}	
	}
	
}


 

package classes
{
	import flash.display.BitmapData;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.display.DisplayObject;
	
	/**
	 * ...
	 * @author fengsser
	 * 游戏入口
	 */
	public class Game 
	{
		var _stage:Stage;
		var cubeArr:Vector.<DisplayObject>;//存放cube对象,Vctor对象代替数组增加效率
		var cubeNum:uint = 120;//方块总数
		//var sourceBMD:BitmapData;
		var cubeSize:int = 10;
		var girdCollision:GridCollision;
		
		
		public function Game(_stage:Stage) {
			this._stage = _stage;
			cubeArr = new Vector.<DisplayObject>();
			init();
			
		}
		
		public functio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值