Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как определить, перетаскиваеться в данный момент объект с помощью startDrag или нет. (http://www.flasher.ru/forum/showthread.php?t=102536)

krolser 16.10.2007 18:50

Как определить, перетаскиваеться в данный момент объект с помощью startDrag или нет.
 
Как определить, перетаскиваеться в данный момент объект с помощью startDrag или нет?

Это написано в документации на StartDrag

Цитата:

Lets the user drag the specified sprite. The sprite remains draggable until explicitly stopped through a call to the Sprite.stopDrag() method, or until another sprite is made draggable. Only one sprite is draggable at a time.
Т.е. получаеться, что одновременно может перемещаться с помощью startDrag только один объект, поэтому с помошью флажка отследить нереально, из за того, что при начале перетягивая нового объекта предыдущий перетягиваемый автоматически остановиться.

Может есть какое то свойство у кого нибудь, или события типа dragged?

Ostgur 16.10.2007 19:58

проверь меняются ли координаты относительно тех, пока не взял на drag, а вообще нет isDragged.

BlooDHounD 16.10.2007 22:13

а унаследовать класс от спрайта и переопределить свойство startDrag и stopDrag?

Код:

private static var _dragged:Sprite;

public function get dragged():Boolean {
return ( this === _dragged );
}

public override function startDrag():void {
_dragged = this;
super.startDrag();
}
public override function stopDrag():void {
super.stopDrag();
_dragged = null;
}


что-то типа того.

krolser 17.10.2007 12:18

Спасибо всем ответившим.

to Ostgur: вообще не понял, что ты пердлагаешь.

to BlooDHounD: Идея хорошая и даже очень правильная, но.... для её реализации мне все мои классы придётся отнаследовать от моего Апгрейднутого sprite. Вот в этом то и загвоздка. Ведь иногда мне нужно наследоваться не только от Sprite, но и от MovieClip, который будет лишен этой функциональности.

Так что вопрос остаётся открытым.

Я пытался переопреелить эти функции у прототипа Sprite. Но у меня ничего не получилось. Просто с прототипами я на "..... твою мать". Может кто знает, как правильно это сделать.

etc 17.10.2007 12:57

Ну сделай апгрейденный MovieClip =)

BlooDHounD 17.10.2007 12:58

в АС3 с портотипами так просто не поработаешь :)

2morrowMan 17.10.2007 13:30

Как вариант:
Код:

var dragSprite:Sprite = null;
...
public function dragSprite(spr:Sprite):void
{
        dragSprite = spr;
        spr.startDrag();
}

public function dropSprite(spr:Sprite):void
{
        spr.stopDrag();
        dragSprite = null;
}

public function isDraging(spr:Sprite):Boolean
{
        return (dragSprite && (dragSprite == spr));
}

Если будут перетаскиваться несколько объекто, то делаешь:
Код:

var dragSprites:Array = [];
// ну и т.д. :)


BlooDHounD 17.10.2007 13:49

несколько объектов не могут драгаться :) что бы драгать несколько объектов, необходимо писать свой драгманагер :)

krolser 17.10.2007 14:59

Цитата:

Сообщение от __etc
Ну сделай апгрейденный MovieClip =)

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

to 2morrowMan: Смотри внимательно третий пост в этой тебе. В нем хоть наследование есть, а у тебя нету. НО всё равно спасибо, что отклинкнулся.

Цитата:

Сообщение от BlooDHounD
в АС3 с портотипами так просто не поработаешь :)

А можно по подробнее, почему так просто не получиться?

Вопрос всё еще открыт. И теперь он преобретает еще более интересный окрас. А можно ли вообще сделать то, о чем я говорю?

Kikasso 17.10.2007 15:18

Заведи себе драг менеджера, отдельным классом, и обращайся примерно так:
Код:

// вместо startDrag
DragManager.currentDrag = mySprite;
// вместо stopDrag
DragManager.currentDrag = null;

ну а внутри статик геттер-сеттер..


Часовой пояс GMT +4, время: 07:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.