|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Экземпляр класса не создается
Делаю галерею, в которой кнопки со ссылками на работы должны добавляться программно на этапе выполнения.
Чтобы многократно не повторять код, сделал обобщенную функцию внутри класса, которая вызывается по таймеру. При вызове функции каждый раз должна создаваться одна кнопка. Но вот доходит до создания экземпляра класса кнопки, как выскакивает ошибка: 1120: Access of undefined property SubBtn. В библиотеке имеется 5 символов и каждый слинкован с автоматически создаваемым класом (SubBtn1, SubBtn2, SubBtn3, SubBtn4, SubBtn5). Привожу код класса: package forpage { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; public class WorkGalary extends MovieClip { public var opened:Boolean; private var localTimer1:Timer; private var localTimer2:Timer; private var repeatCount:uint; private var subBtnNumbers:Array; private var subBtnX:Array; private var subBtnY:Array; private var index:uint = 0; private var subBtn:SubBtn; private var win:MovieClip; public function WorkGalary (winSymbol:MovieClip) { subBtnNumbers = [1, 2, 3, 4, 5]; subBtnX = [70, 70, 70, 355, 725]; subBtnY = [100, 130, 160, 100, 100]; repeatCount = 5; opened = true; win = winSymbol; addChild (win); localTimer1 = new Timer (710, repeatCount); localTimer1.addEventListener(TimerEvent.TIMER, localTimer1Handler); localTimer1.start(); } public function makeRew ():void { localTimer2 = new Timer (100, 1); localTimer2.addEventListener(TimerEvent.TIMER, localTimer2Handler); localTimer2.start(); win.addEventListener (Event.ENTER_FRAME, goBack); } public function goBack (e:Event):void { if (win == null) { throw new Error ("Symbol not defined"); }; try { win.prevFrame (); if (win.currentFrame == 1) { win.removeEventListener (Event.ENTER_FRAME, goBack); opened = false; parent.removeChild (this); } } catch (errObject:Error) { trace ("The message is: " + errObject.message); }; }; private function localTimer1Handler (e:TimerEvent):void { addSubBtns(subBtnNumbers[index], subBtnX[index], subBtnY[index]); index++; }; private function localTimer2Handler (e:TimerEvent):void { removeSubBtns(); }; private function addSubBtns (index, X, Y):void { var newIndex = index; var newX = X; var newY = Y; trace ("REACHED TIL HERE!!!"); subBtn[newIndex] = new SubBtn[newIndex] subBtn[newIndex].x = newX; subBtn[newIndex].y = newY; addChild(subBtn[newIndex]); }; private function removeSubBtns ():void { }; } } Подскажите пожалуйсто, как правильно это реализовать. Последний раз редактировалось Furinax; 18.10.2009 в 15:10. |
|
|||||
чета нифига не понял эту запись. вы от куда это взяли? может надо
да и subBtn у вас не массив, почему вы тогда по индексу обращаетесь? ничего не понятно
__________________
я могу стать всем, если только захочу |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
мне надо, чтобы каждый раз создавался не экземпляр нового класса, а не одного и того же, поэтому и запись
а в моем случае будет работать не так как мне надо. Названия классов частично совпадают (SubBtn), и различаются только цифрой на конце (1, 2, 3 и т.д.) |
|
|||||
Modus ponens
|
Или я не понял вопрос.
__________________
Hell is the possibility of sanity |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Поправил код, согласно вашей идее
В переменных private var subBtns:Array; private var subBtnX:Array; private var subBtnY:Array; private var subBtn:Array; В конструкторе subBtns = [SubBtn1, SubBtn2, SubBtn3, SubBtn4, SubBtn5]; subBtnX = [70, 70, 70, 355, 725]; subBtnY = [100, 130, 160, 100, 100]; subBtn = []; И в самой функции private function addSubBtns (index, X, Y):void { var newIndex = index; var newX = X; var newY = Y; trace ("REACHED TIL HERE!!!"); subBtn[newIndex] = new (subBtns[newIndex])(); subBtn[newIndex].x = newX; subBtn[newIndex].y = newY; addChild(subBtn[newIndex]); }; TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором. at forpage::WorkGalary/addSubBtns() at forpage::WorkGalary/localTimer1Handler() at flash.utils::Timer/_timerDispatch() at flash.utils::Timer/tick() Последний раз редактировалось Furinax; 18.10.2009 в 15:47. |
|
|||||
.
|
private function addSubBtns(index:uint, x:Number, y:Number):void { var c:Class = getDefinitionByName("SubBtn" + index) as Class; if (!c) { throw new IllegalOperationError('No class'); return; } var button:DisplayObject = new c() as DisplayObject; button.x = x; button.y = y; this.subBtn[index] = button; super.addChild(button); } Последний раз редактировалось dimarik; 18.10.2009 в 16:49. |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
перепиал к себе ваш код как есть, но вот это:
1118: Implicit coercion of a value with static type Object to a possibly unrelated type Class. не дает проверить его в действии Последний раз редактировалось Furinax; 18.10.2009 в 16:22. |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Всем БОЛЬШОЕ СПАСИБО за попытку мне помочь (хоть у вас и ничего не удалось).
Я нашел собственное решение для этой проблемы (довольно таки простое). Извините за ваше потраченное время. Монстрский код Dimarik`a помог расширить мой кругозор в области As3. Последний раз редактировалось Furinax; 18.10.2009 в 17:51. |
Часовой пояс GMT +4, время: 01:53. |
|
« Предыдущая тема | Следующая тема » |
|
|