![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2010
Сообщений: 187
|
Подскажите, как это грамотно реализовать?
Для примера я создал две сцены Menu1 и Menu2 Важный момент. В первой сцене на экран добавляется только один мувиклип. А во второй - два. Тоесть количество элементов на сцене может быть разным. Также в нижеприведённом коде не реализовано удаление с экрана ненужных сцен. Код всего этого такой: 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); } } } С 1 по 15 кадр шторка полностью закрывает экран. С 16 по 30 шторка открывается. Тоесть я представляю процесс так: Когда нажимается кнопка на каком либо из экранов. 1. На сцену добавляется клип Curtain. 2. Происходит анимация мувиклипа Curtain с 1 по 15 кадр. 3. В момент когда шторка закрыта, надо удалить все элементы присутствующие на экране. В нашем примере это либо menu1 и greenbox1 либо menu2 4. Затем надо добавить нужные нам элементы новой сцены. К примеру если мы переходим из menu2 в menu1, то нам надо добавить мувиклипы menu1 и greenbox1 5. После того как новая сцена сформирована - можно открыть шторки, проиграв анимацию с 16 по 30 кадры. 6. После того как шторка открылась, мувиклип Curtain можно удалить со сцены. Может быть это делается как-то попроще/иначе? Или всё правильно? |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Менеджер экранов управляет шторками. В момент закрытия шторки он говорит прошлому экрану - "скройся", новому "покажись" и создает/убивает их, если надо. Может их на сцену добавлять где надо, если они display object'ы (1 экран - 1 дисплей обжект, внутри него может сидеть то, что ему надо). Как именно они будут появляться/исчезать - их интимные проблемы.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Нормально, пойдет.
Реализация "удаления сцен" может выглядеть так: ещё надо бы поправить в конструкторе: И дайте более понятные имена методам. Ваши программы, думается, будут расти и тогда вы проклянете эти литеры вместо имен ) |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 187
|
fish_r: Спасибо! Насчёт реализации удаления понятно. Действительно хорошее для меня решение.
А вот вторую часть я не очень понял. Почему добавление слушателя лучше, чем у меня просто вызов M1() ? |
|
|||||
|
Во-первых потому, что видимо приведенный вами пример вырван из какого-то контекста, где так и было (иначе почему M1(event:Event=null)?).
Во-вторых так правильнее начинать программу, потому, что в ходе инициализации объектов (мувиков и пр.) программы часто необходимо свойство stage документ-класса, или других объектов находящихся на сцене, чтобы указать позиционирование и пр. В случае если виз. объект начал работу до добавления на сцену возможны ошибки исполнения, т.к. stage может оказаться равным "null". Ваша программа, также, в какой-то момент может перестать быть самостоятельной и стать частью, элементом другой, более крупной программы, т.е. виз.объектом, поэтому вобщем хорошей практикой считается начинать инициализацию виз.объектов после добавления на сцену, впрочем инициализация не всегда начинается после добавления на сцену, однако момент добавления всё равно учитывается. Последний раз редактировалось fish_r; 23.02.2012 в 14:13. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|