3

私が目指しているものの例

タイトルは多かれ少なかれ一目瞭然です。私はさまざまなチュートリアルに取り組んできましたが、正直に言うと、AS3 があまり得意ではありません。(上の画像は私が目指しているものを示しています)

とにかく、私が見ているほとんどのオンライン チュートリアルで気づいたことは、ドラッグ アンド ドロップのチュートリアルは、1 つのオブジェクトから 1 つのターゲットへ、または複数のオブジェクトから複数のターゲットへのいずれかに基づいているため、誰かが私を助けてどのように説明するのに十分親切であるかどうか疑問に思っていました。複数のオブジェクトを 1 つのターゲットに接続できます。

そして、可能であれば切り替え可能にします。たとえば、オブジェクト 2 をドラッグしたときにオブジェクト 1 が既にターゲット上にある場合、オブジェクト 1 が元の位置に戻り、オブジェクト 2 が代わりに配置されます。

これを説明する簡単な方法は、3 つの彫像があり、ユーザーが 3 つのうちの 1 つを選択して、設定されたターゲット ゾーンに配置できるゲームを作成しようとしていると言うことです。

私が言っていることがあまり意味をなさない場合はお詫び申し上げます。混乱が生じた場合は解決します。現在使用しているAS3コードは次のとおりです。

var startX:int;
var startY:int;

circle1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle2_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle2_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle3_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle3_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

function pickUp(event:MouseEvent):void {
    startX = event.target.x;
    startY = event.target.y;
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);

}

function dropIt(event:MouseEvent):void {
    event.target.stopDrag();

    var theTargetName:String = "target" + event.target.name;
    var theTarget:DisplayObject = getChildByName(theTargetName);
    if (event.target.dropTarget != null && event.target.dropTarget.parent == theTarget){    
        event.target.buttonMode = false;
        event.target.x = theTarget.x;
        event.target.y = theTarget.y;
    }

else{

    event.target.x = startX;
    event.target.y = startY;

circle1_mc.buttonMode = true;
circle2_mc.buttonMode = true;
circle3_mc.buttonMode = true;
4

1 に答える 1

5

をチェックする代わりにdropTarget、 を使用hitTestObjectして、ドロップされたオブジェクトが「接触」しているかどうかを確認できますtheTarget。そうしないと、すでにドロップされている他のアイテムがtheTargetとして報告される可能性がありますdropTarget。また、は動的であるため、各インスタンスにとMovieClipの値を格納できます。startXstartY

target_mc次の変更されたコードは、ドロップ ターゲットとして単一を使用します。1 つのアイテムがドロップされると、他のアイテムは元の場所に戻されます。

// create an array as @David suggested to keep track of your draggable items
var circles:Array = [circle1_mc, circle2_mc, circle3_mc];
for each(var circleMC:MovieClip in circles)
{
    circleMC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    circleMC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
    circleMC.startX = circleMC.x;
    circleMC.startY = circleMC.y;
}

function pickUp(event:MouseEvent):void
{
    // no longer need to keep track of startX & startY here because that's already been done up above
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);

}

function dropIt(event:MouseEvent):void
{
    event.target.stopDrag();
    // check to see if the event target is touching target_mc using hitTestObject
    if(event.target.hitTestObject(target_mc)){
        event.target.buttonMode = false;
        event.target.x = target_mc.x;
        event.target.y = target_mc.y;
        // move all circles OTHER than the current target back to their original positions
        for each(var circleMC:MovieClip in circles)
        {
            if(event.target != circleMC)
            {
                circleMC.x = circleMC.startX;
                circleMC.y = circleMC.startY;
            }
        }
    }
    else
    {
        // only need to move the event target back if it was dropped outside of target_mc
        event.target.x = event.target.startX;
        event.target.y = event.target.startY;
        event.target.buttonMode = true;
    }
}
于 2013-03-12T13:43:24.757 に答える