0

ユーザーがクリスマスの飾りをツリーにドラッグできる単純なドラッグ アンド ドロップ Flash プログラムを作成しようとしています。オーナメントを一度ドラッグする代わりに、オーナメントをクリックするたびに、オーナメントをクリックしたステージに同じクラスの新しいオーナメントを追加する機能が必要です。現在、私はこれを機能させていますが、1つの問題があります。動的ではありません。「ドラッグ」機能を見て、追加されるデフォルトの装飾としてクラス「Symbol31」を選択しました。代わりに、毎回「Symbol31」ではなく、クリックされた装飾のクラスを ActionScript で読み取り、そのクラスを追加するようにします。

以下の私のコードを見てください。

ありがとう

public class DragDrop extends MovieClip
{
    private var originalX:Number;
    private var originalY:Number;

    public function DragDrop()
    {
        originalX = this.x;
        originalY = this.y;
        this.addEventListener(MouseEvent.MOUSE_DOWN, drag);
    }

    private function drag(event:MouseEvent):void
    {
        if(event.target.x>Number(600))
        {
            var newOrnament:Symbol31 = new Symbol31();
            newOrnament.x=originalX;
            newOrnament.y=originalY;
            this.parent.addChild(newOrnament);
            newOrnament.startDrag();
            newOrnament.addEventListener(MouseEvent.MOUSE_UP, drop);
        }else{
            this.startDrag();
            this.parent.addChild(this);
            this.addEventListener(MouseEvent.MOUSE_UP, drop);
        }

    }
4

3 に答える 3

2

最も柔軟な解決策は、最初に event.target を getQualifiedClassName (flash.utils の一部) に渡してクラスの名前を取得し、次にそれを getDefinitionByName (同じく flash.utils 内) に渡して、その文字列を実際のクラス。そのクラスの新しいインスタンスを作成してください。

于 2009-08-24T02:47:10.780 に答える
0

ブランデン・ホールが言ったことに便乗すると、コードは次のようになります。

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class;
var instance:DisplayObject = new ClassReference();
addChild(instance);
于 2009-08-24T05:22:24.097 に答える
0

すべてのオーナメントの基本クラスがあると仮定すると、次のようなことができますか?

var newOrnament = event.target as OrnamentBase
if (newOrnament != null)
{
    // your code
}
于 2009-08-24T01:00:16.393 に答える