1

我使用 startDrag() 来拖动对象 A,当它碰到对象 B 时,函数停止拖动。问题是,如果我将对象 A 拖入对象 B 的速度过快,它会在对象 B 内停止拖动。我的手是否比每帧检查 48 次碰撞的函数更快?

var A:MovieClip;
addEventListener(MouseEvent.MOUSE_DOWN,dad);
addEventListener(Event.ENTER_FRAME,update);
function dad(e:MouseEvent)
{
    A = MovieClip(e.target);
    A.startDrag();
}
function update(e:Event)
{
    if (A !=null && A.hitTestObject(B))
    {
        A.stopDrag();
    }
}
4

1 回答 1

0

尝试使用 MouseEvent.MouseMove 事件而不是 MouseEvent.EnterFrame。

另外,考虑一下:命中测试检测对象是否碰撞。它对分离碰撞的物体没有任何作用。如果您的对象在帧之间移动 10 个像素,则对象将测试为碰撞,但最多可能有 10 个像素的重叠。使用 stopDrag() 不足以分离对象。

根据重叠对象的形状,分离它们的任务可能很简单,也可能非常复杂。如果它们本质上都是圆形的,那很容易。如果它们都是凹多边形,那么您将陷入数学伤害的世界。

以下是我过去用于简单游戏的一些分离方法。 Circle-Cirle 碰撞与分离 Circle-Line 碰撞与分离

(是的,你的手比那快:-))

于 2013-01-07T19:46:32.280 回答