1

スクリプトの問題は、すべてのムービークリップがマウスイベントを上下にディスパッチしますが、マウス移動イベントが一部のムービークリップによってディスパッチされないことです。これは、ダウンイベントをトレースし、すべてのオブジェクトで正常にトレースしている間は予期しない動作です。

また、私のコードに関するフィードバックをお勧めします、ありがとう。

    private function loadPurchasedClip(){
            var decorationItem:String;
            var lastItemIndex:uint = this.getChildIndex(tree1);
            var item:Sprite;

            for(var a in purchasedItems){

                for(var b in purchasedItems[a]){

                if(purchasedItems[a][b].item=='shed'){
                    item = new shed();
                } else {

                    var ClassDefinition:Class = loadedDecorationItem.purchaseItem(purchasedItems[a][b].item) as Class;


                    item = new ClassDefinition();

                }
                item.x = purchasedItems[a][b].posX;
                item.y = purchasedItems[a][b].posY;


                item.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){
                        Mouse.cursor = "hand";
                        e.target.startDrag(false);

                        dusbin.visible = true;
                    item.addEventListener(MouseEvent.MOUSE_MOVE,trashMe);
                });

                item.addEventListener(MouseEvent.MOUSE_UP,function(e:MouseEvent){

                    Mouse.cursor = "auto";
                    e.target.stopDrag();
                    externalPhpCall(e);
                    dusbin.visible = false;
                    if(trashClip){
                        removeChild(trashClip);
                        trashClip = null;
                    }
                });
                item.mouseChildren = false;


                // if item is fence or flowers then move them behind the tree
                if(
                    String(purchasedItems[a][b].item).indexOf('fence')!=-1
                    ||
                    String(purchasedItems[a][b].item).indexOf('flower')!=-1
                ){
                    addChildAt(item,lastItemIndex);

                    lastItemIndex++;
                } else {
                    addChildAt(item,this.numChildren-2);
                }

                purchasedNameAr[getChildIndex(item)] = purchasedItems[a][b].item;

            }

        }
4

2 に答える 2

1

確かではありませんが、マウスがクリップを離れた後でも、クリップがMouseEvent.MOUSE_MOVEイベントをディスパッチし続けることを期待している可能性があります。これは発生しません。これは、ローカルマウスポインタが共同で実行されている間のみです。座標(つまり、yourClip.mouseX / mouseY)は、クリップ自体のグラフィックと交差して起動します。クリップをドラッグしても、MOVEイベントがディスパッチされることは保証されません。

クリップがすべてルート上にあると仮定しましょう。つまり、「ステージ」にアクセスできます。これを行うことができます。

交換:

item.addEventListener(MouseEvent.MOUSE_MOVE,mouseMove);

と:

stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMove);

...ただし、必要に応じてそのイベントを削除することを忘れないでください(マウスがクリップ上で解放されない場合は、ステージを再度使用してください)。

 stage.addEventListener(MouseEvent.MOUSE_UP,endMove);


//Don't use anon function as won't have stage reference:

function endMove(e:MouseEvent):void {
        //The rest of your code, then:
        stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMove);
    }
于 2013-03-27T13:46:08.557 に答える
0
        private  function loadPurchasedClip(){
        var decorationItem:String;
        var lastItemIndex:uint = this.getChildIndex(tree1);
        var item:Sprite;
        var Move:Boolean

        for(var a in purchasedItems){

            for(var b in purchasedItems[a]){

            if(purchasedItems[a][b].item=='shed'){
                item = new shed();
            } else {

                var ClassDefinition:Class = loadedDecorationItem.purchaseItem(purchasedItems[a][b].item) as Class;

                item = new ClassDefinition();

            }
            item.x = purchasedItems[a][b].posX;
            item.y = purchasedItems[a][b].posY;
            item.addEventListener(e:Event.ENTER_FRAME, onEnterFrame);
            item.addEventListener(MouseEvent.MOUSE_DOWN,function(e:MouseEvent){
                    Mouse.cursor = "hand";
                    e.target.startDrag(false);
                    Move = true
                    dusbin.visible = true;

            });

            item.addEventListener(MouseEvent.MOUSE_UP,function(e:MouseEvent){

                Mouse.cursor = "auto";
                e.target.stopDrag();
                externalPhpCall(e);
                dusbin.visible = false;
                if(trashClip){
                    removeChild(trashClip);
                    trashClip = null;
                }
            });
            item.mouseChildren = false;

            // if item is fence or flowers then move them behind the tree
            if(
                String(purchasedItems[a][b].item).indexOf('fence')!=-1
                ||
                String(purchasedItems[a][b].item).indexOf('flower')!=-1
            ){
                addChildAt(item,lastItemIndex);

                lastItemIndex++;
            } else {
                addChildAt(item,this.numChildren-2);
            }

            purchasedNameAr[getChildIndex(item)] = purchasedItems[a][b].item;

        }
        function onEnterFrame(e:Event):void{
         if(Move){
        // what ever here

        {

    }
于 2013-03-27T13:11:52.480 に答える