MOUSE_UP и MOUSE_DOWN выдают во флэш-памяти при использовании его в перетаскивании - PullRequest
0 голосов
/ 16 ноября 2011

Не могли бы вы помочь мне выяснить, что вызвало неожиданный вывод в моей программе?Я использовал Flash CS5 и AS3.и это игра с перетаскиванием.

ошибок не найдено, но мои MOUSE_UP и MOUSE_DOWN не работают так, как предполагалось.(по моему мнению)

я говорю это, потому что, когда я проверяю коды, когда я нажимаю на объект.мыши вниз вроде как выполняют функции щелчка или что-то в этом роде.я не могу уронить объект.

это набор кодов, который я использовал для перетаскивания

 wintersquash_mc.buttonMode = true;
 wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
 wintersquash_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);

 function pickupObject(event:MouseEvent):void
 {
event.target.startDrag(true);
event.target.parent.addChild(event.target);
objectoriginalX = event.target.x;
objectoriginalY = event.target.y;
 }
 function dropObject(event:MouseEvent):void
 {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent == matchingTarget)
{
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
    event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
    event.target.buttonMode = false;
    event.target.x = matchingTarget.x;
    event.target.y = matchingTarget.y;
    scorer++;
    score.text = String(scorer);
}
else
{
    event.target.x = objectoriginalX;
    event.target.y = objectoriginalY;
}
 }

надеюсь, кто-нибудь скажет мне, почему он не работает должным образом: (

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Я обычно управляю перетаскиванием так:

wintersquash_mc.buttonMode = true;

wintersquash_mc.mouseChildren = false;
//this way you won't start dragging i.e. a sub-movieclip of the button

wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

function pickupObject(event:MouseEvent):void
{
    event.target.startDrag(true);

    event.target.parent.addChild(event.target);
    // is it necessary to add the clip to its parent?
    // I would rather make a var on the root,
    // and dump the event.target into that like this:
    // root.nowDragged = event.target;

    objectoriginalX = event.target.x;
    objectoriginalY = event.target.y;
    stage.addEventListener(MouseEvent.MOUSE_UP, dropObject);
}

function dropObject(event:MouseEvent):void
{
    root.nowDragged.stopDrag(true);
    stage.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
    // this removes the listener to prevent false alarms on other mouse ups
    //... (rest of your code)
}

Надеюсь, это помогло.

0 голосов
/ 16 ноября 2011

Попробуйте добавить MOUSE_UP на сцену, а не свой видеоклип.Это должно гарантировать, что событие будет перехвачено независимо от того, где находится мышь.

Кроме того, вы можете рассмотреть возможность добавления прослушивателя MOUSE_UP только после запуска pickupObject ().Например:

wintersquash_mc.buttonMode = true;
wintersquash_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);

function pickupObject(event:MouseEvent):void
{
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);
    objectoriginalX = event.target.x;
    objectoriginalY = event.target.y;
    stage.addEventListener(MouseEvent.MOUSE_UP, dropObject);
}

Это потребует от вашего класса ссылки на объект Stage.Кроме того, вам придется явно удалить слушателя со сцены, когда вы закончите с ним.Попробуйте, однако, посмотреть, работает ли он для вас.

...