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

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

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

Регистрация: Apr 2010
Сообщений: 1
По умолчанию Проблема с addElement после эфекта Move3D

Flex4
Проблема такая.
Есть в приложении два BorderContainer. Разных размеров. Назовем их родительские.
Внутри каждого еще по одному BorderContainerу. Это дочерние контейнеры.

Задача. Поменять местами дочерние контейнеры у родителей.

Когда просто вызываем метод addElement, без всяких выкрутасов все отлично работает

Добавляем эфект Move3D для визуализации перемещения по осям X и Y после вызова addElement в родительских контейнерах ничего не отображается. И не возможно правильно выставить x и y для дочерних контейнеров. Просто никакой реакции. Без эффекта все отлично работает. В чем дело?

Такое ощущение что внутри родительских контейнеров площадь увеличилась и почему то центр сместился, поэтому мы не можем точно спозиционироваться.
Дело в том что на бэкграунде родительских контейнеров ровно по середине отображается индекс 0,1,2 Так вот эта надпись смещается почему-то


Код AS3:
//Все методы относятся к классу родительского контейнера на основе BorderContainer
 
//Метод для перемещения дочерних контейнеров. 
public function MoveToMain(disp:MBVideo, disp0:MBVideo):void
			{
				this.Cur4MoveDisp = disp; // сохраняем ссылки для того чтобы, по завершении эффекта перемещения прицепить их к родителям
				this.Cur4MoveDisp0 = disp0;
 
				disp.x = disp.pFrame.x;
				disp.y = disp.pFrame.y;
				disp.pFrame.pApp.addElement(disp); // Добавляем дочерний контейнер на самый верхний уровень чтоб плыл поверху  disp0.pFrame.pApp это ссылка на контейнер приложения
// подготавливаем эффект для первого контейнера
 
				this.moveEffect.target = disp;
				this.moveEffect.xFrom = disp.x;
				this.moveEffect.yFrom = disp.y;
				this.moveEffect.xBy = disp0.pFrame.x - disp.x;
				this.moveEffect.yBy = disp0.pFrame.y - disp.y;
				this.moveEffect.duration = 1000;
				this.moveEffect.repeatCount = 1;
 
				// подготавливаем эффект для второго контейнера
				disp0.pFrame.pApp.addElement(disp0); // тоже добавляем на верхний уровень
				this.moveEffect0.target = disp0;
				this.moveEffect0.xFrom = disp0.x;
				this.moveEffect0.yFrom = disp0.y;
				this.moveEffect0.xBy = -(disp0.pFrame.x - disp.x);
				this.moveEffect0.yBy = -(disp0.pFrame.y - disp.y);
				this.moveEffect0.duration = 1000;
				this.moveEffect0.repeatCount = 1;
 
 
				this.moveEffect.play();
				this.moveEffect0.play();
 
			}
 
// События на завершение перемещения
		        protected function MoveEnd():void
			{
                           var frmMain:MBFrame = this.pApp.arrFrames[0];
			   frmMain.DockDisplay(this.Cur4MoveDisp);
			}
 
			protected function MoveEnd0():void
			{
			   this.DockDisplay(this.Cur4MoveDisp0);
			}
 
// метод парковки дочернего контейнера
// тут устанавливаем новые размеры и другие атрибуты для дочерних контейнеров
public function DockDisplay(display:MBVideo):void
			{
				display.width = this.width;
				display.height = this.height;
				display.x = 0;
				display.y = 0;
				this.curVideo = display;
				this.curVideo.pFrame = this;
				this.curVideo.isInMainFrame = this.isMainFrame;
 
				this.addElement(display);
 
				display.ResizeDisplay();
				if (this.isMainFrame)
					this.curVideo.SetLayout4Main();
				else
					this.curVideo.SetLayout4NotMain();
			}
 
// Причем если в методе MoveToMain
// просто сразу  вызывать DockDisplay для обоих то все прекрасно работает
public function MoveToMain(disp:MBVideo, disp0:MBVideo):void
			{
				disp.pFrame.pApp.addElement(disp);
				disp0.pFrame.pApp.addElement(disp0);
 
				disp0.pFrame.DockDisplay(disp);
				this.DockDisplay(disp0);
                        }
А после отработки эффекта
в одном родительском контейнере пусто, а другой отображает дочерний со смещением в два раза где-то.
Т.е. это значит в первом контейнере тоже есть дочерний элемент просто его не видно так как он за края выходит

Как получается, такое разрушительное действие на координаты x и y после отработки эфекта?

Добавлено через 8 часов 53 минуты
Проблема решается заменой эффекта Move3D на обычный Move.
В чем было дело пока не понял. Видимо Move3D как-то по другому с координатами обращается

Добавлено через 8 часов 54 минуты
Проблема решается заменой эффекта Move3D на обычный Move.
В чем было дело пока не понял. Видимо Move3D как-то по другому с координатами обращается


Последний раз редактировалось atn; 25.04.2010 в 06:28. Причина: Flex4
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
addElement , Move3D

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

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


 


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


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