Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как узнать, что "залипло" на мышке? (http://www.flasher.ru/forum/showthread.php?t=117154)

orcpochta 20.10.2008 17:13

Как узнать, что "залипло" на мышке?
 
Можно ли стандартными методами сделать проверку, есть ли в данный момент что-то на мышке, т.е. перетаскивается ли что-нибудь с помощью startDrag() и если перетаскивается, то что именно?

skald 20.10.2008 17:17

в случае если мало объектов, то можно проверить хиттестом к примеру ...

orcpochta 20.10.2008 17:34

Цитата:

Сообщение от skald (Сообщение 771606)
в случае если мало объектов, то можно проверить хиттестом к примеру ...

Это нестандартный метод..))

А учитывая, что приходится работать с множеством классов, то не хотелось бы в одних классах ссылаться на другие для осуществления такой проверки.
Можно, конечно, завести объект, в который при startDrag() будет передаваться состояние "занято" и, если надо, данные о том, что конкретно зависло на мыше, а при stopDrag() будет писаться состояние "свободно", и все остальные классы будут обращаться к этому объекту для проверки, но чисто для общего развития хотелось бы знать, есть ли какие-то "вшитые" методы?

silin 20.10.2008 18:12

стандартных методов нет..
можно переопределить startDrag/stopDrag, с тем чтобы хранить текущий таскаемый мувик в _global.currentDrag, например:
Код:

MovieClip.prototype.startDrag = function() {
        _global.currentDrag = this;
        ASnative(900, 20).apply(this,arguments);
       
}

MovieClip.prototype.stopDrag = function() {
        _global.currentDrag = undefined;
        ASnative(900, 21).apply(null);
}
//посмотреть
function onEnterFrame(){
        trace(currentDrag);
}


orcpochta 20.10.2008 18:20

Цитата:

Сообщение от silin (Сообщение 771625)
стандартных методов нет..
можно переопределить startDrag/stopDrag, с тем чтобы хранить текущий таскаемый мувик в _global.currentDrag, например:
Код:

MovieClip.prototype.startDrag = function() {
        _global.currentDrag = this;
        ASnative(900, 20).apply(this,arguments);
       
}

MovieClip.prototype.stopDrag = function() {
        _global.currentDrag = undefined;
        ASnative(900, 21).apply(null);
}
//посмотреть
function onEnterFrame(){
        trace(currentDrag);
}


Код:

ASnative(900, 20).apply(this,arguments);
и
ASnative(900, 21).apply(null);

- Не соображу, что здесь происходит...:wacko:

silin 20.10.2008 18:40

да ничего страшного не происходит: к вызвавшему мувику применяются нативные методы (startDrag/stopDrag ), но при этом еще сохраняется/обнуляется ссылка на него

orcpochta 20.10.2008 18:59

Цитата:

Сообщение от silin (Сообщение 771638)
да ничего страшного не происходит: к вызвавшему мувику применяются нативные методы (startDrag/stopDrag ), но при этом еще сохраняется/обнуляется ссылка на него

Можно в двух словах, что такое нативные методы, для чего исползуются и, если не сложно, ссылки на документацию?

Спасибо!)))

silin 20.10.2008 19:26

нативные в смысле родные, встроенные в плеер
доступ к ним возможен и как положено по документации (startDrag, напр.) и через недокументированную функцию ASnative()
чтобы сохранить родной функционал MovieClip.prototype.startDrag в новом определении как раз и нужен ASnative()

ps
предостережение:
подобные вещи работают и зачастую это очень удобно, но любое использование недокументированных фич (да и любых хаков) чревато непонятками ( и в общем-то считается дурным тоном у солидных кодеров), особенно если проект не сольный : кто-там чего напереопределял, поди потом разберись..

orcpochta 20.10.2008 20:41

Цитата:

Сообщение от silin (Сообщение 771654)
нативные в смысле родные, встроенные в плеер
доступ к ним возможен и как положено по документации (startDrag, напр.) и через недокументированную функцию ASnative()
чтобы сохранить родной функционал MovieClip.prototype.startDrag в новом определении как раз и нужен ASnative()

ps
предостережение:
подобные вещи работают и зачастую это очень удобно, но любое использование недокументированных фич (да и любых хаков) чревато непонятками ( и в общем-то считается дурным тоном у солидных кодеров), особенно если проект не сольный : кто-там чего напереопределял, поди потом разберись..


Т.е., вместо того, чтобы "ломать" класс MovieClip, можно сделать свой класс, расширяющий класс MovieClip, в котором переопределить startDrag()/stopDrag(), точнее, дописать их функционал к уже имеющемуся - можно ведь так?

silin 20.10.2008 20:57

ага, примерно так..
"примерно" потому, что легально дописать функционал к startDrag()/stopDrag() в классе все равно не получится, но никто не мешает предусмотреть в нем сохранение ссылки на таскаемой мувик во всех ситуациях, связанных со startDrag() и т.п.
UPD:
сори, погорячился,
в классе получится и 'легально'
Код:

class MyMC extends MovieClip
{
        static var currentDrag:MyMC;
       
        function startDrag() {
                currentDrag = this;
                super.startDrag.apply(this, arguments);
        }
        function stopDrag() {
                currentDrag = null;
                super.stopDrag.apply(this);
        }
}



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

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