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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question Эффект перехода между экранами

Подскажите, как это грамотно реализовать?
Для примера я создал две сцены Menu1 и Menu2
Важный момент. В первой сцене на экран добавляется только один мувиклип. А во второй - два.
Тоесть количество элементов на сцене может быть разным.
Также в нижеприведённом коде не реализовано удаление с экрана ненужных сцен.
Код всего этого такой:

Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
 
 
	public class Main extends Sprite 
	{
 
		public var menu1:MovieClip;
		public var menu2:MovieClip;
		public var greenbox1:MovieClip;
 
		public function Main():void 
		{
			M1();
		}
 
 
		public function M1(event:Event = null):void 
		{
			menu1 = new Menu1();
			addChild(menu1);
			greenbox1 = new Greenbox1();
			addChild(greenbox1);
			menu1.but1.addEventListener(MouseEvent.MOUSE_DOWN, M2);
		}	
 
		public function M2(event:Event = null):void 
		{
			menu2 = new Menu2();
			addChild(menu2);
			menu2.but2.addEventListener(MouseEvent.MOUSE_DOWN, M1);
		}		
 
 
	}
 
}
Также имеется мувиклип Curtain состоящий из 30 кадров анимации.
С 1 по 15 кадр шторка полностью закрывает экран.
С 16 по 30 шторка открывается.

Тоесть я представляю процесс так:
Когда нажимается кнопка на каком либо из экранов.
1. На сцену добавляется клип Curtain.
2. Происходит анимация мувиклипа Curtain с 1 по 15 кадр.
3. В момент когда шторка закрыта, надо удалить все элементы присутствующие на экране. В нашем примере это либо menu1 и greenbox1 либо menu2
4. Затем надо добавить нужные нам элементы новой сцены. К примеру если мы переходим из menu2 в menu1, то нам надо добавить мувиклипы menu1 и greenbox1
5. После того как новая сцена сформирована - можно открыть шторки, проиграв анимацию с 16 по 30 кадры.
6. После того как шторка открылась, мувиклип Curtain можно удалить со сцены.

Может быть это делается как-то попроще/иначе? Или всё правильно?

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Менеджер экранов управляет шторками. В момент закрытия шторки он говорит прошлому экрану - "скройся", новому "покажись" и создает/убивает их, если надо. Может их на сцену добавлять где надо, если они display object'ы (1 экран - 1 дисплей обжект, внутри него может сидеть то, что ему надо). Как именно они будут появляться/исчезать - их интимные проблемы.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 22.02.2012, 12:33
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 3  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Нормально, пойдет.

Реализация "удаления сцен" может выглядеть так:

Код AS3:
    while( this.numChildren ) this.removeChildAt( 0 );
ещё надо бы поправить в конструкторе:

Код AS3:
                public function Main():void 
		{
			this.addEventListener( Event.ADDED_TO_STAGE, M1 );
		}
И дайте более понятные имена методам. Ваши программы, думается, будут расти и тогда вы проклянете эти литеры вместо имен )

Старый 22.02.2012, 13:44
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 4  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
fish_r: Спасибо! Насчёт реализации удаления понятно. Действительно хорошее для меня решение.
А вот вторую часть я не очень понял. Почему добавление слушателя лучше, чем у меня просто вызов M1() ?

Старый 23.02.2012, 04:58
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 5  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Во-первых потому, что видимо приведенный вами пример вырван из какого-то контекста, где так и было (иначе почему M1(event:Event=null)?).

Во-вторых так правильнее начинать программу, потому, что в ходе инициализации объектов (мувиков и пр.) программы часто необходимо свойство stage документ-класса, или других объектов находящихся на сцене, чтобы указать позиционирование и пр. В случае если виз. объект начал работу до добавления на сцену возможны ошибки исполнения, т.к. stage может оказаться равным "null". Ваша программа, также, в какой-то момент может перестать быть самостоятельной и стать частью, элементом другой, более крупной программы, т.е. виз.объектом, поэтому вобщем хорошей практикой считается начинать инициализацию виз.объектов после добавления на сцену, впрочем инициализация не всегда начинается после добавления на сцену, однако момент добавления всё равно учитывается.


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

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

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


 


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


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