Jel*_*lla 1 flash collision-detection actionscript-3
我正在AS3.0中制作一款类似于非常类似于kurve的游戏.到目前为止,我已经完成了4个不同玩家的动作,并且工作正常.
我现在要进行碰撞检测,以便测试一个'蠕虫' - 可以说,是否与彼此或它自己的尾巴相撞.
据我了解,如果我使用hitTestObject(); 它将使用整个对象的注册区域,这将是一个巨大的问题,因为这个注册进行了包含所有对象的4面注册.因此,如果使用它,它只会通过输入这个矩形而不是击中实际的蠕虫来"碰撞".这是否正确理解?
我一直在寻找不同的碰撞检测方法,似乎无法为我的项目找到最佳方法.
我的想法是检查'蠕虫'是否在白色背景上绘制他们的新精灵.如果他们不是,那它肯定会有所作为.
您可以在此处查看我如何使用我的代码:.as格式的代码链接到.fla文件
对不起我的问题,希望它有点意义.任何帮助是极大的赞赏!!
最好的问候 - Jesper
小智 5
如果您希望Pixel Perfect Collision Detection具有高效的CPU使用率,请尝试此功能:
trace("Collided: " + (areaOfCollision(mc1, mc2) != null));
trace("Where: " + areaOfCollision(mc1, mc2));
function areaOfCollision(object1:DisplayObject, object2:DisplayObject, tolerance:int = 255):Rectangle {
if (object1.hitTestObject(object2)) {
var limits1:Rectangle = object1.getBounds(object1.parent);
var limits2:Rectangle = object2.getBounds(object2.parent);
var limits:Rectangle = limits1.intersection(limits2);
limits.x = Math.floor(limits.x);
limits.y = Math.floor(limits.y);
limits.width = Math.ceil(limits.width);
limits.height = Math.ceil(limits.height);
if (limits.width < 1 || limits.height < 1) return null;
var image:BitmapData = new BitmapData(limits.width, limits.height, false);
var matrix:Matrix = object1.transform.concatenatedMatrix;
matrix.translate(-limits.left, -limits.top);
image.draw(object1, matrix, new ColorTransform(1, 1, 1, 1, 255, -255, -255, tolerance));
matrix = object2.transform.concatenatedMatrix;
matrix.translate(-limits.left, -limits.top);
image.draw(object2, matrix, new ColorTransform(1, 1, 1, 1, 255, 255, 255, tolerance), BlendMode.DIFFERENCE);
var intersection:Rectangle = image.getColorBoundsRect(0xFFFFFFFF, 0xFF00FFFF);
if (intersection.width == 0) return null;
intersection.offset(limits.left, limits.top);
return intersection;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在成功预备之后hitTestObject(),此功能在背景上从每个涂有不同颜色的两个对象的形状拍摄快照,然后将它们与新颜色上的颜色相交覆盖它们,返回Rectangle所得到的形状.非常酷.
要了解有关Pixel Perfect Collision Detection的更多信息,您可以进行谷歌碰撞检测,然后选择其中一个名称:" The ActionScript Man "," Troy Gilbert "," Boulevart(wim) "," Grant Skinner(gSkinner) "或" Senocular ".顺便说一下,那些家伙是很棒的AS3参考.
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |