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.EnterFrameの代わりにMouseEvent.MouseMoveイベントを使用してみてください。

また、次のことも考慮してください。ヒットテストは、オブジェクトが衝突するかどうかを検出します。衝突するオブジェクトを分離することは何もしません。オブジェクトがフレーム間で10ピクセル移動する場合、オブジェクトは衝突としてテストされますが、最大10ピクセルのオーバーラップが発生する可能性があります。stopDrag()を使用するだけでは、オブジェクトを分離するのに十分ではありません。

重なり合うオブジェクトの形状に応じて、それらを分離するタスクは単純な場合と非常に複雑な場合があります。それらが両方とも本質的に円形である場合、それはかなり簡単です。それらが両方とも凹多角形である場合、あなたは数学の傷の世界にいます。

これは、私が過去に単純なゲームに使用したいくつかの分離方法です。 円と円の衝突と分離 円と線の衝突と分離

(そして、はい、あなたの手はそれよりも速いです:-))

于 2013-01-07T19:46:32.280 に答える