Цитата:
Сообщение от alecsisk
1. Наследуйтесь от Btn, в базовом классе - MovieClip (всё равно название класса и winName одинаковые )
|
ну и тогда появляется еще один as файл, а моя задача - сократить их количество
Цитата:
Сообщение от alecsisk
2. Передавайте winName в качестве параметра после вызова конструктора.
|
тогда смысл от проверки значения winName теряется.
Уменя так было вначале, потом я пошел в сторону обобщения.
Идея заключается в том, чтобы у меня был один класс, который бы я мог связать со всем символмами кнопок в библиотеке. При это изменяя всего лишь один его параметр.
Но как вижу, автоматическое создание классов этого мне сделать не позволяет.
Добавлено через 52 минуты
Решил обойтись вообще без параметров и сделал вот так:
Код AS3:
public class Btn extends MovieClip {
private var goBackStarted:Boolean;
private var win:MovieClip;
private var winName:String
public function Btn () {
stop();
winName = "defaultName";
unblockBtn();
}
private function setWinName (newName:String) {
winName = newName;
return winName;
}
private function rollOverHandler (e:MouseEvent):void {
if (goBackStarted = true) {
removeEventListener (Event.ENTER_FRAME, goBack);
}
gotoAndPlay ("OVER");
}
private function rollOutHandler (e:MouseEvent):void {
addEventListener (Event.ENTER_FRAME, goBack);
}
private function downHandler (e:MouseEvent):void {
blockBtn();
gotoAndStop ("DOWN");
openWin();
}
private function goBack (e:Event):void {
goBackStarted = true;
prevFrame ();
if (currentFrameLabel == "OVER") {
removeEventListener (Event.ENTER_FRAME, goBack);
gotoAndStop (1);
}
}
private function blockBtn ():void {
removeEventListener (MouseEvent.ROLL_OVER, rollOverHandler);
removeEventListener (MouseEvent.ROLL_OUT, rollOutHandler);
removeEventListener (MouseEvent.MOUSE_DOWN, downHandler);
buttonMode = false;
}
private function unblockBtn ():void {
goBackStarted = false;
buttonMode = true;
addEventListener (MouseEvent.ROLL_OVER, rollOverHandler);
addEventListener (MouseEvent.ROLL_OUT, rollOutHandler);
addEventListener (MouseEvent.MOUSE_DOWN, downHandler);
}
private function openWin ():void {
if (winName == "aboutWin") {
win = new AboutWin;
win.x = 133;
win.y = 265;
parent.addChild(win);
} else if (winName == "contactWin") {
win = new ContactWin;
win.x = 133;
win.y = 265;
parent.addChild(win);
};
}
}
И потом решил задавать имя параметру winName через основной клас приложения:
Код AS3:
private function addSymbols():void {
aboutBtn = new AboutBtn();
aboutBtn.setWinName ("aboutBtn");
aboutBtn.x = 133;
aboutBtn.y = 158;
contactBtn = new ContactBtn();
contactBtn.setWinName ("contactBtn");
contactBtn.x = 420;
contactBtn.y = 158;
bcObject = new BcObject;
bcObject.x = 104;
bcObject.y = 45;
addChild (aboutBtn);
addChild (contactBtn);
addChild (bcObject);
}
Но наткнулся на новую проблему:
TypeError: Error #1006: setWinName не является функцией.
at forpage::Fproject/addSymbols()
at forpage::Fproject()
Почему setWinName не является функцией? Она же определенна в суперклассе как функция, значит должна и в подклассах работать.
Можете объяснить че тут не так?
Добавлено через 1 час 14 минут
Вообще смысл от автоматического наследования классов теряется. Получается, что поле Base class придумали чисто для того, чтобы один класс связать с кучей символов. А сделать более узкую функциональность никоим образом не получается?
Добавлено через 2 часа 14 минут
пробую даже так:
Код AS3:
contactBtn = new ContactBtn();
contactBtn.winName = "contactWin";
contactBtn.x = 420;
contactBtn.y = 158;
все равно никакой реакции. Почему то автоматическое расширение класса Btn не дает никаких возожностей для изменения его свойств