|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Реализация alwaysOnTop для DisplayObjecta
Вопрос вполне себе глупый, хочется изящного решения. Я не нашел ни одного эвента (поднимите мне веки) который отвечал бы за смену позиции объекта в дисплейлисте.
Простым решением было бы создать класс в котором будет один энетрфрейм и список объектов, который пополняется пользователем, на энтерфрэйм естественно проверяется на какой глубине лежат объекты, и в случае если они находятся не на самой высшей позиции перекинуть их туда. Вопрос: есть ли более изящное решение для такой ситуации? Вопрос на вопрос ("зачем?") не актуален. |
|
|||||
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
class SmartContainer extends DisplayObjectContainer { private var _onTopObj:DisplayObject; override public function addChild(child:DisplayObject):DisplayObject { if(_onTopObj && contains(_onTopObj)) { if(child !== _onTopObj) { super.addChildAt(child, getChildIndex(_onTopObj)) } }else { super.addChild(child); } return child; } } UPD: Но уж никак не ENTER_FRAME.
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 24.02.2010 в 18:17. |
|
|||||
strange mood
|
Еще можно перекрыть методы DisplayObjectContainer, которые меняют позицию объекта в дисплейлисте (addChild, addChildAt, removeChild, removeChildAt, setChildIndex, swapChildren, swapChildrenAt)
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Цитата:
Нет, для этого есть класс SmartContainer, который можно добавить на stage. >> это далеко не изящное, а частное решение Любое решение — частное. Особенно то, которое не предусмотрено API. Вы хотите чтобы все автоматически работало как надо? Так не бывает, смиритесь.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
Вы не правы. Область видимости должна быть независимой.
Поэтому удобнее использовать тот способ который описал я. Взамен энтерфэйма может быть таймер. Решение которое предложил я универсальное, поэтому обойдемся без громких слов. И пожалуйста не надо меня поучать, я вполне компетентен, чтобы решить с чем смириться, а с чем нет. У кого еще есть идеи? И да пожалуйста не надо стараться изменить задачу. Последний раз редактировалось mayakwd; 24.02.2010 в 18:53. |
|
|||||
var top:DisplayObject; addEventListener(Event.ADDED, onSomethingAdded); private function onSomethingAdded(e:Event):void { if(!top){ return; } //Событие пузырьковое (отслеживаем события только из подписанного контейнера) if (e.target == e.currentTarget){ if (contains(top)){ setChildIndex(top, numChildren-1); } } }
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 24.02.2010 в 19:40. |
Часовой пояс GMT +4, время: 03:13. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|