Просмотр полной версии : Флаги ();
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");
мне кажеться не гуманным когда таких кнопок море этож класс епт
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);
Ок, мы создаем статическую переменную типа массив, и в нее складываем все вновь созданные экземпляры нашего класса (на самом деле не самый удачный ход, т.как удаляй экземпляр класса нам нужно будет удалить и ссылку на него из этого массива. Поэтому в примере добавлен небольшой хак, позволяющий до удаления клипа "отписаться".
Чтобы проиграть остальные клипы, я бы добавил еще одну статическую переменную указывающую на клип, который проигрывать не нужно, и, соответственно, перебирая клипы в цикле его бы пропустил.
Пример прилагается.
3d Developer
30.06.2008, 13:12
Спасибо Вам. Если что попробую отписаться в личку!
3d Developer
30.06.2008, 13:35
WVXVW Вообщем то во флеш я давно но как аниматор в основном. Основные правила написание простейших функций я знаю. Вот даже разобрался сам как простые классы писать ((( но не доконца. Недавно попалась книженция Гурского на АС2.0 , что скажите стоит ли ее читать ? А точнее хорошо ли и понятно ли написана глава ООП в данной книге ? ( Просто именно ООП меня интересует) Заметил в преведенном ниже коде ASnative сильно смахивающую на недокументированные функции языка )))). хотя может это ит от Ball duplicate взято ) точно не глядел
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.