Показать сообщение отдельно
Старый 11.10.2009, 18:53
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 8  
Ответить с цитированием
Furinax

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Цитата:
Сообщение от 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 не дает никаких возожностей для изменения его свойств


Последний раз редактировалось Furinax; 11.10.2009 в 19:47.