Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Эффект перехода между экранами (http://www.flasher.ru/forum/showthread.php?t=175686)

In8Finity 22.02.2012 11:53

Эффект перехода между экранами
 
Подскажите, как это грамотно реализовать?
Для примера я создал две сцены 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 можно удалить со сцены.

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

-De- 22.02.2012 12:31

Менеджер экранов управляет шторками. В момент закрытия шторки он говорит прошлому экрану - "скройся", новому "покажись" и создает/убивает их, если надо. Может их на сцену добавлять где надо, если они display object'ы (1 экран - 1 дисплей обжект, внутри него может сидеть то, что ему надо). Как именно они будут появляться/исчезать - их интимные проблемы.

fish_r 22.02.2012 12:33

Нормально, пойдет.

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

Код AS3:

    while( this.numChildren ) this.removeChildAt( 0 );

ещё надо бы поправить в конструкторе:

Код AS3:

                public function Main():void 
                {
                        this.addEventListener( Event.ADDED_TO_STAGE, M1 );
                }

И дайте более понятные имена методам. Ваши программы, думается, будут расти и тогда вы проклянете эти литеры вместо имен )

In8Finity 22.02.2012 13:44

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

fish_r 23.02.2012 04:58

Во-первых потому, что видимо приведенный вами пример вырван из какого-то контекста, где так и было (иначе почему M1(event:Event=null)?).

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


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

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