0

ドラッグ アンド ドロップ ゲームを使用していますが、完璧ではありません。すべてのムービークリップは、ターゲットに正確に並んでいるとき、ターゲットにドラッグ アンド ドロップします。

ただし、MC をターゲット ゾーンの外にドラッグしているときにマウスを離すと、常にではありませんが、1010 用語未定義エラーがスローされ、MC が元の開始 x/y 座標にスナップされません (マウスを上げていたときの場所に mc を残すだけです)。デバッガーを実行すると、ドロップ関数で次の行が処理されます。

if (event.currentTarget.dropTarget != null && MovieClip(event.currentTarget.dropTarget.parent).allowed.indexOf(event.currentTarget) >= 0){

参考までに、一部のムービークリップの特定のターゲットではなく、ターゲットの「ゾーン」が必要だったため、ターゲット配列のセットが許可されています。

何か案は?


以下の更新されたコード:

if (event.currentTarget.dropTarget != null) {
var mc:MovieClip=event.currentTarget.dropTarget as MovieClip;
if (mc==null) { // typecast fails. Say there's a Sprite below
    reply_txt.textColor = 0xEE1212
    reply_txt.text = "Oops!  Try Again!";
    event.currentTarget.alpha = 1;
    event.currentTarget.x = startX;
    event.currentTarget.y = startY; 
    return; // nothing to do here
}
mc=mc.parent;
if (mc && mc.allowed) { 
    // this MC has "allowed" property not "undefined" - we're in the grid
    // so now we can check indexOf() safely
    if (mc.allowed.indexOf(event.currentTarget)>=0){
        reply_txt.textColor = 0x33BC10
        reply_txt.text = "Good Job!";
        event.currentTarget.alpha = 1;
        event.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp);
        event.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, dropIt);
        event.currentTarget.buttonMode = false;
        event.currentTarget.x = MovieClip(event.currentTarget.dropTarget.parent).x;
        event.currentTarget.y = MovieClip(event.currentTarget.dropTarget.parent).y;
        stored.push(event.currentTarget);
        startXarray.push(startX);
        startYarray.push(startY);
        counter++;
    }

}

}

4

1 に答える 1

1

はい、オブジェクトをstopDragすると、カーソルの下にあるDisplayObjectの種類がチェックされ、そのオブジェクトがdropTargetイベントのプロパティとして返されます。したがって、オブジェクトがallowedプロパティを持たない別のMCにドロップされると、1010エラーがスローされます。次のようなネストされたifステートメントでこの状況を確認する必要があります。

if (event.currentTarget.dropTarget != null) {
    var mc:MovieClip=event.currentTarget.dropTarget as MovieClip;
    if (mc==null) { // typecast fails. Say there's a Sprite below
        returnThisBack();
        return; // nothing to do here
    }
    mc=mc.parent;
    if (mc && mc.allowed) { 
        // this MC has "allowed" property not "undefined" - we're in the grid
        // so now we can check indexOf() safely
        if (mc.allowed.indexOf(event.currentTarget)>=0)  snapThisToGrid();
    } else returnThisBack();
} else returnThisBack();
于 2013-03-19T03:56:41.050 に答える