Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.02.2010, 17:26
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 1  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
По умолчанию Реализация alwaysOnTop для DisplayObjecta

Вопрос вполне себе глупый, хочется изящного решения. Я не нашел ни одного эвента (поднимите мне веки) который отвечал бы за смену позиции объекта в дисплейлисте.

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

Вопрос: есть ли более изящное решение для такой ситуации?
Вопрос на вопрос ("зачем?") не актуален.
__________________
Блог, Twitter
Брюзга.

Старый 24.02.2010, 18:12
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Код AS3:
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.
Старый 24.02.2010, 18:14
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 3  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Еще можно перекрыть методы DisplayObjectContainer, которые меняют позицию объекта в дисплейлисте (addChild, addChildAt, removeChild, removeChildAt, setChildIndex, swapChildren, swapChildrenAt)
__________________
тонкий тролль, осеянный благодатью

Старый 24.02.2010, 18:32
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 4  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
вы мне и stage предлагаете переписать? это далеко не изящное, а частное решение.
__________________
Блог, Twitter
Брюзга.

Старый 24.02.2010, 18:44
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 5  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Цитата:
Сообщение от mayakwd Посмотреть сообщение
вы мне и stage предлагаете переписать? это далеко не изящное, а частное решение.
>> вы мне и stage предлагаете переписать
Нет, для этого есть класс SmartContainer, который можно добавить на stage.

>> это далеко не изящное, а частное решение
Любое решение — частное. Особенно то, которое не предусмотрено API. Вы хотите чтобы все автоматически работало как надо? Так не бывает, смиритесь.
__________________
#flasher@irc.trg.ru:6667

Старый 24.02.2010, 18:51
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 6  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Вы не правы. Область видимости должна быть независимой.
Поэтому удобнее использовать тот способ который описал я. Взамен энтерфэйма может быть таймер.

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

У кого еще есть идеи?
И да пожалуйста не надо стараться изменить задачу.
__________________
Блог, Twitter
Брюзга.


Последний раз редактировалось mayakwd; 24.02.2010 в 18:53.
Старый 24.02.2010, 19:05
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 7  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Код AS3:
 
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);
     }
  }
}
Вроде так должно сработать, хотя не отловит тот же самый setChildIndex


Последний раз редактировалось Rzer; 24.02.2010 в 19:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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