![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
|
В as2 текстовому полю для удобства работы можно было добавить параметр например id
var txt:TextField; for (var i = 0; i < 2; i++){ txt = this["txt" + i]; txt.id = i; txt.onChanged = function (){ trace(this.id); } } Можно ли это обойти? Я думаю что можно подправить класс через прототипы, но способ не очень нравиться, + в системе прототипов я плаваю. |
|
|||||
|
ветеран форума
|
в AS3 прототипы не рекомендуются к использованию. Если хочется добавить свойство текстовому полю - расширяем класс TextField и добавляем к нему нужное свойство. Правда, при этом добавлять на сцену придется вручную, так как базовым классом для визуального элемента в библиотеке TextField назначить нельзя.
__________________
4am is time to rock |
|
|||||
|
Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
|
DarkLight
Цитата:
Например, как без прототипов изменить стандартный trace() для объектов и массивов? Какие могут быть последствия использования прототипов? Цитата:
Сейчас я для определения id выдираю его из параметра name, но это не очень удобно. Тем более если например собирать в массив текстовые поля с разными именами. Есть ли еще какой-то способ логично связать большое количество текстовых полей (или других объектов, например спрайтов) не создавая наследника класса. Описанный способ на as2, мне кажется удобным и логичным. Пока приходит в голову только делать вместо массива объект, и обращаться по к его элементам по name, но как способ тоже не очень нравиться. |
|
|||||
|
ветеран форума
|
Использование прототипов негативно влияет на производительность. Если нужно добавлять свойства к наследникам Sprite и т п - то однозначно расширять, т к можно спокойно разместить на сцене.
Что до связи - можно, например, сделать ассоциативный массив, ключами которого будут ссылки на текстовые поля, а значениями - id полей. Кстати, стандартный trace для собственных классов меняется путем override-а метода toString() в классах, который вызывается на переданному trace объекту, если последний не является строкой.
__________________
4am is time to rock |
|
|||||
|
зачем выдумывать велосипед ?
import flash.utils.Dictionary; private var hash:Dictionary = new Dictionary(); private var storedTxt:Array = new Array() private function create():void{ var txt:TextField; for (var i = 0; i < 2; i++){ //txt = this["txt" + i]; //я бы сделал так txt = new TextField() storedTxt[i] = txt var thumb:InteractiveObject = txt as InteractiveObject; thumb.addEventListener(Event.CHANGE,this.changedHandler) hash[thumb] = i } } private function changedHandler(event:Event):void{ var target:InteractiveObject = event.target as InteractiveObject; trace(hash[target]) } //ну а если нада удалить обьекты то обращаемся к массиву private function delObject():void { for (var i:uint = 0;storedTxt[i];i++) { if (storedTxt[i]!=null) { removeChild(storedTxt[i]) storedTxt[i] = null } } }
__________________
на каком языке вы пишите? а на каком нужно? Последний раз редактировалось darksranger; 18.11.2008 в 08:39. |
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
package { import flash.text.TextField; public class MyTextField extends TextField { public var id:int; public function MyTextField(){ super(); } } } Последний раз редактировалось CrazyFlasher; 18.11.2008 в 09:49. |
|
|||||
|
Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
|
darksranger
Спасибо. Пожалуй вот этот вариант подходит, про объект я подумал, а вот про Dictionary, как-то нет... CrazyFlasher Зачем отвечать на вопрос, который не был задан. Я не спрашивал как расширить класс TextField, меня интересует решение проблемы без расширения класса. Расширить класс проблемы не составляет. DarkLight Цитата:
Цитата:
Как мне казалось, прототипы не рекомендуют использовать только из-за того, что класс на ходу можно переделать. Последний раз редактировалось faust.d503; 18.11.2008 в 13:51. |
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Затем, что это есть true way.
|
|
|||||
|
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
|
Цитата:
|
|
|||||
|
Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
|
CrazyFlasher
Решение поставленной задачи - порнография? Забавно... Ситуация, в которой описанный метод не подходит: На таймлайне есть куча текстовых полей - расставленных, например, художником, с ними надо производить какие-то действия. mre Цитата:
В общем можно отвечать на вопросы, а можно повышать чувство собственной важности, написав, то, что и так известно и спрашивающему и отвечающему. Еще раз насчет прототипов. Откуда информация о том, что их использование влияет на производительность? Это странно как минимум по вот этой причине: Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:33. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|