1

ドラッグ アンド ドロップ機能とオブジェクトの選択に問題があります。

簡単なフラッシュアレンジャーを作成します(ステージにテーブルアイコンを追加します-部屋)。テーブルアイコンの新しいインスタンスを作成するボタンがあり、ステージ上でドラッグアンドドロップできます。

問題は、最後に追加したアイコンのみをドラッグ アンド ドロップできることです。新しいインスタンス od アイコンを追加すると、以前に作成されたアイコンを (ドラッグ アンド ドロップ) 取得できません:/

ここに私のコード:メインクラス

import flash.events.MouseEvent;
import flash.events.Event;
import com.adobe.images.JPGEncoder;
import flash.geom.Point;

btn_middleTable.addEventListener(MouseEvent.CLICK, f_middleIco);
btn_bigTable.addEventListener(MouseEvent.CLICK, f_bigIco);
btnSave.addEventListener(MouseEvent.CLICK, f_save);

function f_middleIco(event:MouseEvent):void
{
    var middle:MiddleIco = new MiddleIco();
    middle.x = 20;
    middle.y = 20;
    stage.addChild(middle);
    trace("created");
}

function f_bigIco(event:MouseEvent):void
{
    var big:BigIco = new BigIco();
    big.x = 20;
    big.y = 20;
    stage.addChild(big);
    trace("created");
}

function f_save(event:MouseEvent)
{
    var jpgEncoder:JPGEncoder;
    jpgEncoder = new JPGEncoder(90);

    var bitmapData:BitmapData = new BitmapData(stage.width, stage.height);
    bitmapData.draw(stage, new Matrix());
    var img = jpgEncoder.encode(bitmapData);

    var file:FileReference = new FileReference();
    file.save(img, "filename.png");
}

アイコン インスタンス パッケージ:

package  {

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.geom.Point;

    public class BigIco extends MovieClip {
            public var active:Boolean;

        public function BigIco() {
            // constructor code
            this.addEventListener(Event.ENTER_FRAME, f_move);
            this.addEventListener(MouseEvent.MOUSE_DOWN,downf);
            this.addEventListener(MouseEvent.MOUSE_UP,upf);
        }

        public function f_move(e:Event)
        {
            if(active==true)
            {
                startDrag();
            }
            else if(active==false)
            {
                stopDrag();
            }
        }

        public function downf(e:MouseEvent)
        {
            active = true;
        }
        public function upf(e:MouseEvent)
        {
            active = false;
        }
}
}

実際にマウス カーソル上にあるすべてのアイコン (インスタンス) を選択できるようにするにはどうすればよいですか?

4

1 に答える 1

0

理論: startDragandは繰り返し呼び出されることを意図していませんが、リスナーstopDragを使用しているため、追加するすべてのクリップに対して、フレームごとに 1 回呼び出されます。ENTER_FRAME

私はこれをテストしていませんが、最初は単一の(したがって) しかドラッグできないため、他のクリップを含め、stopDrag実際にドラッグを停止する可能性があります。SpriteMovieClip

したがって、その理論が成り立つ場合、最初のアイコンは新しいアイコンの呼び出しstartDrag()によってすぐにキャンセルされます。f_move()stopDrag()

しかしENTER_FRAME、どのイベントでも、あなたがリスナーである必要はありません。これは同じ結果をもたらすはずです (実際に動作することを除いて) - マウスリスナーでドラッグメソッドをすぐに呼び出すだけです:

public class BigIco extends MovieClip {
    public var active:Boolean;

    public function BigIco() {
        // constructor code
        this.addEventListener(MouseEvent.MOUSE_DOWN, downf);
        this.addEventListener(MouseEvent.MOUSE_UP, upf);
    }

    public function downf(e:MouseEvent)
    {
        // Unless you're going to use 'active' for other stuff,
        // you can remove this line:
        active = true; 
        startDrag();
    }
    public function upf(e:MouseEvent)
    {
        // Same here:
        active = false;
        stopDrag();
    }
}

それ以外には、あなたのコードに実際の問題を見つけることはできません。

編集:「パーフェクト」バージョン、ポインターがアイコンの上にない場合はマウスアップも検出します:

public class BigIco extends MovieClip {

    public function BigIco() {
        // Only add mouse down listener here. We'll add up when needed below:
        this.addEventListener(MouseEvent.MOUSE_DOWN,downf);
    }

    public function downf(e:MouseEvent)
    {
        // Add event listener to stage, so as to be triggered even if
        // the pointer isn't over the icon when releasing the button.
        // Note that this will also work even with the mouse *outside*
        // the stage/swf area:
        stage.addEventListener(MouseEvent.MOUSE_UP,upf);
        startDrag();
    }
    public function upf(e:MouseEvent)
    {
        // Remember to remove the event listener after use:
        stage.removeEventListener(MouseEvent.MOUSE_UP, upf);
        stopDrag();
    }
}
于 2013-07-13T09:25:22.533 に答える