Форум 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=162866)

Denis_Pryanikov 04.08.2011 19:14

Работа с кадрами в классах
 
Здравствуйте.

При компиляции выдается ошибка что ссылка на btn_home (клип на втором кадре) null. Что нужно сделать, чтобы можно было переходить по кадрам туда-обратно? Ну или как сделать, чтобы из всех кадров в главном классе были видны кнопки?...
Код AS3:

package  {
 
        import flash.display.*;
        import flash.events.*;       
 
        public class MainClass extends MovieClip {
 
                public function MainClass() {
                        stop();
 
                        btn_go1.addEventListener(MouseEvent.CLICK, goto2);
                        btn_home.addEventListener(MouseEvent.CLICK, goHome);
                }
 
                public function goto2(e:MouseEvent):void {
                        gotoAndStop(2);       
 
                }
                public function goHome (e:MouseEvent):void {
                        gotoAndStop(1);
                }
 
        }
 
}


toFL 04.08.2011 19:19

Кладите ваши кнопки в первый кадр и управляйте ими при помощи visible (true/false)

Denis_Pryanikov 04.08.2011 19:25

Т.е. классу MainClass будут видны кнопки расположенные только на первом кадре?

toFL 04.08.2011 19:30

- В первом кадре, классу MainClass, будут видны кнопки из первого кадра.
- Во втором кадре, классу MainClass, будут видны кнопки из второго кадра.
- Если кнопка лежит в первом кадре и продолжается до второго (например), то классу MainClass, её будет видно в обоих кадрах.

Denis_Pryanikov 04.08.2011 19:45

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

toFL 04.08.2011 19:56

Вариант 1:
Код AS3:

private function registerListeners ():void
{
        if (currentFrame == 2)
                (button as MovieClip).addEventListener(MouseEvent.CLICK, onClick);
        // здесь нужно быть уверенным, что button существует
}

Вариант 2:
Код AS3:

private function registerListeners ():void
{
        if (button != null)
                (button as MovieClip).addEventListener(MouseEvent.CLICK, onClick);
        // это для случаев, когда в каждом кадре есть разные кнопки с одинаковыми именами
}


Bgg 04.08.2011 20:02

Цитата:

Сообщение от Denis_Pryanikov (Сообщение 1018086)
Получается я должен вешать слушателей для кнопок второго кадра, когда нахожусь во втором кадре?
Если да, то каким образом это сделать в классах? (при написании кода на таймлайне с этим не было проблем).
Объясните, пожалуйста.

Не использовать второй кадр вообще.

Denis_Pryanikov 04.08.2011 20:12

Цитата:

Сообщение от Bgg (Сообщение 1018090)
Не использовать второй кадр вообще.

Я начал заниматься приложением и посчитал, что лепить все в 1 кадре будет не совсем удобно.
Просто ни разу не видел архитектуру flash-приложений (более-менее больших). Вот, хотелось бы узнать, каким образом идет работа там. Все в 1 кадре? (ну с прелоадером 2). Не могли бы просвятить меня? :)
Получается если все в 1 кадре, все данные складываются в контейнеры и далее нужно прятать/показывать контейнер?

Добавлено через 49 секунд
toFl, спасибо за код

Bgg 04.08.2011 20:19

Цитата:

Сообщение от Denis_Pryanikov (Сообщение 1018104)
Я начал заниматься приложением и посчитал, что лепить все в 1 кадре будет не совсем удобно.
Просто ни разу не видел архитектуру flash-приложений (более-менее больших). Вот, хотелось бы узнать, каким образом идет работа там. Все в 1 кадре? (ну с прелоадером 2). Не могли бы просвятить меня? :)
Получается если все в 1 кадре, все данные складываются в контейнеры и далее нужно прятать/показывать контейнер?

Да, все делится по контейнерам. Можно скрывать/показывать(visible) или добавлять/удалять(addChild/removeChild). Не обязательно все складывать вручную самому, можно добавлять программно.

Более того, в нормальных редакторах кода(FlashDevelop) по умолчанию основной класс унаследован от Sprite, а не от MovieClip как у вас сейчас, и там вообще нет кадров.

Denis_Pryanikov 04.08.2011 20:22

Скажите пожалуйста, а что предпочтительнее: скрывать/показывать(visible) или добавлять/удалять(addChild/removeChild) ?

Были мысли попробовать писать во FlashDevelop, но сомневался вообще в его необходимости. Стоит попробовать?
И получается при работе с контейнерами (без кадров) нужно работать со Sprite, а про MovieClip можно забыть? :)


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

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