Форум 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 17.10.2007 15:34

Цитата:

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

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

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

Не пойдет по описанным выше причинам.

Ладно....Обясню по русски.
У меня уже много чего написанно. И вдруг мне понадобилось, чтобы объект при получении какогото события знал, такскаеться он сейчас или нет. Я конечно могу при startDrag запомнить, что мы начали его таскать... НО, я никак не могу отловить момент, когда его перестают тоскать. Почему? А потому, что этот момент может наступить, когда начнут тоскать что-нибудь другое.

Все ваши варианты предполагают полный проход по всему коду. Или всех переонаследовать, что не совсем корректно, кода я использую чужие классы. Или найти все вхождения startDrag и написать там какое-нибудь "запоминание" (неважно менаджер это или флажок). А я хочу достичь эффекта "малой кровью".

2morrowMan 17.10.2007 16:19

Цитата:

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

Причем тут наследование?
Блин, небыло времени все расписывать, но вижу придется!
(Пишу все находу без проверки на работоспособность - извиняйте за ошибки)

Код:

// Drager.as
package
{
        public class Drager // DragManager, называй как хочешь
        {
                private var target:Sprite = null;
               
                public function DragMgr()
                {
                }

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

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

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

Код:

// somewhere...
import Drager;
...
var myDrager = new Drager();
...
function onMouseDown(event:MouseEvent):void
{
        if (event.currentTarget is Sprite)
                myDrager.dragSprite(event.currentTarget);
}

function mouseReleased(event:MouseEvent):void {
{
        myDrager.dropSprite(event.currentTarget);
}
...
function someFunc()
{
        trace(myDrager.isDraging(mySomething));
}


krolser 17.10.2007 16:51

to 2morrowMan: Тогда у меня к тебе второй вопрос, как твою штуку внедрить к кучу классов. Мне что везде вместо startDrag писать myDrager.startDrag? Я это делать не особо хочу потому что
Цитата:

Сообщение от krolser
Это проблемы не решает. А вдруг мне надо, а мне и надо, использовать сторонние компоненты


BlooDHounD 17.10.2007 18:54

ну обычно люди прежде чем писать кучу классов думают, что им это грозит, а потом уже пишут. процесс называется "проектирование". либо написав эту кучу классов выбрают из предложенных решений и реализовывают. или сами находят эти решения. врят ли человек написавший кучу классов придёт на форум с вопросом "как таскать мувик"

Kikasso 17.10.2007 21:24

>Все ваши варианты предполагают полный проход по всему коду
Кошмар. А что нет такого пункта в меню как "найти в файлах"?

lowka 17.10.2007 22:34

Цитата:

Сообщение от krolser
Я это делать не особо хочу потому что:
Цитата:

Сообщение от krolser
А вдруг мне надо, а мне и надо, использовать сторонние компоненты


99.9% визуальных компонентов имеют в цепочке наследования flash.display.Sprite. 0.01% оставлена для компонентов, порожденных композиций (не встречал таких -- полагаю, что это изначально тупиковая ветвь). А заменять sprite.startDrag на dragManager.startDrag(sprite) всеравно придется.

krolser 18.10.2007 13:24

Цитата:

Сообщение от BlooDHounD
ну обычно люди прежде чем писать кучу классов думают, что им это грозит, а потом уже пишут. процесс называется "проектирование". либо написав эту кучу классов выбрают из предложенных решений и реализовывают. или сами находят эти решения. врят ли человек написавший кучу классов придёт на форум с вопросом "как таскать мувик"

Отправляю к первому посту. Мне кажеться там другой вопрос задавался, есть ссылка на документацию, не поленился даже сделать вольный перевод. Я задал серьёзный, стоящий вопрос. Он же не сводиться только к тасканию Sprite, он гораздо шире, как подменить функциональность стандартных классов AWM2, не прибегая к наследованию, чтобы остальные написаные классы (может даже не мною) даже не догадались, что что работает иначе.

Кстати, запостил комент в LifeDoc с предложением о внесении такого метода (isDragged) в стандарт. Авось появиться в следующей версии.

Особое спасибо lowka, за описание примерного соотношения классов в AS3.

Скорее всего применю вариант из третьего поста.

Так как начался флейм с поучением как "проектировать" и как искать по файлам, то предлагаю админам закрыть тему, дабы не плодить флуд.
Спасибо всем откликнувшимся.

BlooDHounD 18.10.2007 16:30

жесть :) в первом послу небыло условия: "лень править кучу классов" :)


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

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