![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 41
|
Вопрос, связанный с заточкой данных функций именно под AS3. Раньше делал динамическое создание кнопок (именно текстовых) так, как сейчас нашёл в теме форума из AS2:
var my_array = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"]; for (var i = 0; i<my_array.length; i++) { var mc = this.createEmptyMovieClip("target_mc"+i, i); mc._y = 30*i; var mc_txt = mc.createTextField("txt", 0, 0, 0, 100, 30); mc_txt.border = true; mc_txt.text = my_array[i]; // mc.onPress = function() { trace(this.txt.text); }; } очень прошу подсказать решение.. или может быть всё-таки это где-то обсуждалось, да я не нашёл.. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
var myArray:Array = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"]; for(var i:int = 0; i < myArray.length; i++) { var mc:Sprite = new Sprite(); mc.y = 30*i; var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.border = true; tf.name = 'buttonTextField'; tf.text = myArray[i] as String; mc.addChild(tf); mc.addEventListener(MouseEvent.CLICK, buttonClickHandler); addChild(mc); } function buttonClickHandler(event:MouseEvent):void { var btn:Sprite = event.currentTarget as Sprite; var tf:TextField = btn.getChildByName('buttonTextField') as TextField; trace('clicked text:', tf.text); }
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 10.09.2010 в 12:49. |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 41
|
спасибо! надо конечно учить AS3..
а почему забыть про динамические св-ва и MC? чем они по сути плохи стали? |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Динамические св-ва и были плохи, они ж не бесплатны, понятное дело. Больше памяти жрут динамические классы как минимум.
В MC всё равно нельзя добавить програмно кадры, потому (если не считать того, что МС dynamic, но про это см. первое предложение) тут лучше спрайт.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Цитата:
А плохи они например тем, что используя динамические свойства вы отказываетесь от статической проверки кода компилятором, и когда у вас внезапно в текстовом поле отобразится NaN, вы сломаете голову, прежде чем найдете ошибку. Или тем, что в конкретный момент времени проблематично узнать, какие данные содержит объект. Или тем, что читабильность кода, в котором используются динамические свойства, ниже плинтуса. Или тем, что обращение к динамическим свойствам на порядок медленнее.
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 10.09.2010 в 13:13. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
По-моему в вашем тексте можно заменить "динамические свойства" на getChildByName %) Но его хоть явно видно, когда используют.
Пост ниже советую топикстартеру ценить, там код лишен всех недостатков динамических штук (а писать такое по поводу такого вопроса на форуме обычно лень).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 10.09.2010 в 14:07. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Цитата:
Но если уж быть дотошным, то правильнее было-бы написать нечто вроде этого: package { class MyClass extends Sprite { private var _myArray:Array; public function MyClass() { _myArray = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6"]; for(var i:int = 0; i < myArray.length; i++) { var btn:MyBtn = new MyBtn(_myArray[i] as String); btn.y = 30*i; btn.addEventListener(MouseEvent.CLICK, buttonClickHandler); addChild(btn); } } private function buttonClickHandler(event:MouseEvent):void { var btn:MyBtn = event.currentTarget as MyBtn; trace('clicked text:', btn.link); } } class MyBtn extends Sprite { private var _link:String; public function MyBtn(link:String) { _link = link; var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.border = true; tf.text = link; addChild(tf); } public funciton get link():String { return _link; } } }
__________________
#flasher@irc.trg.ru:6667 |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|