Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Флаги (); (http://www.flasher.ru/forum/showthread.php?t=113454)

3d Developer 29.06.2008 18:35

Флаги ();
 
Пишу кнопочный класс простейший :

Код:


class nav.MainMenu extends MovieClip {
       
        var _loc1:MovieClip;
       
        var _loc2:TextField;
       
        public function MainMenu() {
               
                this.onRollOver = a_Roller;
               
                this.onRollOut = b_Roller;
               
                this.onReleaseOutside = b_Roller;
               
                this.onRelease = c_Roller;
               
               
        }
        function a_Roller() {
                this.gotoAndPlay("Over");
        }
        function b_Roller() {
                this.gotoAndPlay("Out");
        }
        function c_Roller() {
                this.gotoAndPlay("Release");
                this.enabled = false;
        }
}

Встает вопрос : после нажатия кнопки она не доступна; как же теперь компактнее написать чтобы при нажатии след кнопки все остальные открывались ?

Кнопок 8 штук. Доступ к ним использую с помощью имени

Код:

if (this._name =="_stud") { _loc2.text = "Студия" };
Да и еще вопрос какой наилучший способ обращения к классам кнопок мой метод описан выше.

Alex_beginner 29.06.2008 18:57

Здравствуйте 3d Developer!

Мне не совсем понятна вот эта конструкция:

Цитата:

Код:

function a_Roller() {
                this.gotoAndPlay("Over");
        }
        function b_Roller() {
                this.gotoAndPlay("Out");
        }
        function c_Roller() {
                this.gotoAndPlay("Release");
                this.enabled = false;
        }


Для чего она? Если для "скрытия" и "открытия кнопок", то не лучше ли делать это напрямую по их имени.
В коде я не вижу инициализацию _loc1 и _loc2. Объявление есть, а инициализации похоже нет. Или я неправ.
Потом, обратите внимание _loc1 и _loc2 без аттрибута private, а значить нарушается принцип инкапсуляции коцепции ООП - пользуйтесь акссессорами или открытыми методами для инициализации закрытых свойств.

И вообще, по приведенному классу трудно определить, что он делает. Поэтому, сделайте описание того, что Вы хотите сделать подробно по пунктам, обрисуйте варианты взаимодействия программы с пользователем, укажите аспекты и условия.

3d Developer 29.06.2008 19:06

хм... странное мнение. Как бы так : this.enabled = false; значит что кнопка недоступна.

Далее Private мы используем в том случае если прячем _loc1 и _loc2 от области видимого кода. А _loc1 и _loc2 есть обычные мувиклипы находящиеся внутри кнопки и если дать их в привайт (поидее) то работать не будут. Далее _loc1 не определена как таковая в коде это так( она на всяк случай у мня висит вдруг че добавлю). _loc2 текствовое поле - определено.


И так ставлю вопрос более понтяным :
При нажатии кнопки под действием this.enabled = false; кнопка становится недоступна но она так же и остается недоступной когда я нажму вторую кнопку класса и т.д. да хоть 500 и все они будут недоступными для нажатия больше.

Вопрос стоял в том как аккуратно избавится от данных событий тоесть ПРИ нажатии кнопки A ( она стала недоступна ) а кнопки B,c,D,E получили свойство enabled = true;
Как то так... надеюсь понятно.
Просто писать так типа :

Код:

if (this._name == "_newsbtn") {
        _parent._newsect.enabled = true;
        _parent._newsect.gotoAndStop("Over");
        _parent._newsarc.enabled = true;
        _parent._newsarc.gotoAndStop("Over");

мне кажеться не гуманным когда таких кнопок море этож класс епт

wvxvw 29.06.2008 19:45

Код:

class nav.MainMenu extends MovieClip {
       
        private static var __instances:Array;
        private static function __enableAll():void
        {
                var i:Number;
                var l:Number = __instances.length;
                for (i = 0; i < l; i++) {
                        MovieClip(__instances[i]).enabled = true;
                }
        }
       
        var _loc1:MovieClip;
       
        var _loc2:TextField;
       
        public function MainMenu() {
                this.onRollOver = a_Roller;
                this.onRollOut = b_Roller;
                this.onReleaseOutside = b_Roller;
                this.onRelease = c_Roller;
               
                if (!__instances) __instances = [];
                __instances.push(this);
        }
        function a_Roller() {
                this.gotoAndPlay("Over");
        }
        function b_Roller() {
                this.gotoAndPlay("Out");
        }
        function c_Roller() {
                this.gotoAndPlay("Release");
                __enableAll();
                this.enabled = false;
        }
}

Ну, так, например.

3d Developer 29.06.2008 19:50

спасибо вам большое!

3d Developer 30.06.2008 01:40

WVXVW прошу Вас описать вообщем испльзованный код. Я в программ недавно плохо понимаю некоторые моменты....

Кроме всего описанного как еще дописать чтобы после события onRelease произошло событие gotoAndStop("Over") у всех кроме того у которого произошло событие onRelease/
Пробовал добавить так
Код:

MovieClip(__instances[i]).gotoAndStop("Over");
но ничего не выходит видимо загвоздка в другом

Поясните плиз вот эти 2 строчки мне неособо понятны они почему так и что они делают:

Код:

if (!__instances) __instances = [];
                __instances.push(this);


wvxvw 30.06.2008 04:30

Вложений: 1
Ок, мы создаем статическую переменную типа массив, и в нее складываем все вновь созданные экземпляры нашего класса (на самом деле не самый удачный ход, т.как удаляй экземпляр класса нам нужно будет удалить и ссылку на него из этого массива. Поэтому в примере добавлен небольшой хак, позволяющий до удаления клипа "отписаться".
Чтобы проиграть остальные клипы, я бы добавил еще одну статическую переменную указывающую на клип, который проигрывать не нужно, и, соответственно, перебирая клипы в цикле его бы пропустил.
Пример прилагается.

3d Developer 30.06.2008 13:12

Спасибо Вам. Если что попробую отписаться в личку!

3d Developer 30.06.2008 13:35

WVXVW Вообщем то во флеш я давно но как аниматор в основном. Основные правила написание простейших функций я знаю. Вот даже разобрался сам как простые классы писать ((( но не доконца. Недавно попалась книженция Гурского на АС2.0 , что скажите стоит ли ее читать ? А точнее хорошо ли и понятно ли написана глава ООП в данной книге ? ( Просто именно ООП меня интересует) Заметил в преведенном ниже коде ASnative сильно смахивающую на недокументированные функции языка )))). хотя может это ит от Ball duplicate взято ) точно не глядел


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

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