2012-12-02 19 views
0

嗨,我有一个难以用言语解释的问题,所以让我给出一张图片然后尝试解释。由于我在计算器我不能上传后的图片的新用户,所以我会放一个链接:http://tinypic.com/r/kbrpt2/6AS3:具有多个形状对象的testHitObject

我想要什么:
我希望能够将我的播放器(蓝色球)至2点并调用函数player.hitTestObject(Wall)并获取值false

所以我的问题是
当我将玩家(蓝色球)移动到点1或2并调用函数player.hitTestObject(Wall)时,它会返回值真

所以基本上:
我想要的功能ion player.hitTestObject(Wall)只有在触摸对象(形状)的灰色部分时才会返回true,并且当播放器对象位于Wall对象的中间但未触及灰色部分(形状)时,我希望它返回false。

一个解决方案(但不是最优):
一种解决方案是创建3个对象,比测试3次,看看玩家对象有接触任何墙壁,那就是在这个简单的例子确定的,但如果你创造更大对象代码开始变得凌乱。

所以,如果有人知道任何其他解决方案我会感激。

回答

0

我相信hitTestObject使用剪辑的边界框来检查冲突。你可能想看看hitTestPoint代替

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestPoint()

这里的想法是,你的墙会调用hitTestPoint对点的X/Y。确保将shapeFlag设置为true,例如

myWall.hitTestPoint(point.x,point.y,true);

我的两美分 - 我认为这些内置的碰撞方法非常缓慢。如果你可以将你的墙打破成单个矩形,你可以用更高效的方式检查与基本数学的碰撞。

+1

谢谢你的回答。所以你认为这是更好的解决方案,通过数学和x,y线然后使用hitTestPoint()和hitTestObject()? – user1870213

+0

是的,检查一个点是否在矩形内是比较快的。这里是一个简单的速度测试,我只是鞭打 - http://pastebin.com/iqad7x72 – robochase6000

+0

值得注意的是,做像矩形数学(rect.x + rect.width)来获得矩形的右边缘,而不是使用flash的原生函数rect.right,所以我将它包含在测试中。 – robochase6000