Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.11.2008, 01:49
faust.d503 вне форума Посмотреть профиль Отправить личное сообщение для faust.d503 Найти все сообщения от faust.d503
  № 1  
Ответить с цитированием
faust.d503
 
Аватар для faust.d503

Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
По умолчанию Добавление параметра id к TextField

В as2 текстовому полю для удобства работы можно было добавить параметр например id

Код AS1/AS2:
var txt:TextField;
for (var i = 0; i < 2; i++){
	txt = this["txt" + i];
	txt.id = i;
	txt.onChanged = function (){
		trace(this.id);
	}
}
В тройке на такое же действие компилятор ругается, мол у TextField нет такого свойства и он конечно прав.
Код AS3:
var txt:TextField;
for (var i = 0; i < 2; i++){
	txt = this["txt" + i];
	txt.id = i;
	txt.addEventListener(Event.CHANGE, txtChange);
 
}
function txtChange(e:Event){
	var txt:TextField = e.currentTarget as TextField;
	trace(txt.id)
}
Можно ли это обойти? Я думаю что можно подправить класс через прототипы, но способ не очень нравиться, + в системе прототипов я плаваю.

Старый 18.11.2008, 02:26
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 2  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
в AS3 прототипы не рекомендуются к использованию. Если хочется добавить свойство текстовому полю - расширяем класс TextField и добавляем к нему нужное свойство. Правда, при этом добавлять на сцену придется вручную, так как базовым классом для визуального элемента в библиотеке TextField назначить нельзя.
__________________
4am is time to rock

Старый 18.11.2008, 04:40
faust.d503 вне форума Посмотреть профиль Отправить личное сообщение для faust.d503 Найти все сообщения от faust.d503
  № 3  
Ответить с цитированием
faust.d503
 
Аватар для faust.d503

Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
DarkLight

Цитата:
в AS3 прототипы не рекомендуются к использованию.
Почему? Понятно, что система ООП в as3 строиться на классах, но, по-моему, проще и логичнее изменить уже готовый класс и им пользоваться, чем создавать наследника.
Например, как без прототипов изменить стандартный trace() для объектов и массивов?
Какие могут быть последствия использования прототипов?

Цитата:
Правда, при этом добавлять на сцену придется вручную, так как базовым классом для визуального элемента в библиотеке TextField назначить нельзя.
В смысле вручную? Для меня вручную - руками положить на сцену, если так можно сделать, то мне это нужно. Если имеется ввиду создавать через конструктор в коде, то мне это в решении многих задач жизнь только усложнит.
Сейчас я для определения id выдираю его из параметра name, но это не очень удобно. Тем более если например собирать в массив текстовые поля с разными именами.

Есть ли еще какой-то способ логично связать большое количество текстовых полей (или других объектов, например спрайтов) не создавая наследника класса.

Описанный способ на as2, мне кажется удобным и логичным.

Пока приходит в голову только делать вместо массива объект, и обращаться по к его элементам по name, но как способ тоже не очень нравиться.

Старый 18.11.2008, 07:27
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 4  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Использование прототипов негативно влияет на производительность. Если нужно добавлять свойства к наследникам Sprite и т п - то однозначно расширять, т к можно спокойно разместить на сцене.

Что до связи - можно, например, сделать ассоциативный массив, ключами которого будут ссылки на текстовые поля, а значениями - id полей.

Кстати, стандартный trace для собственных классов меняется путем override-а метода toString() в классах, который вызывается на переданному trace объекту, если последний не является строкой.
__________________
4am is time to rock

Старый 18.11.2008, 08:34
darksranger вне форума Посмотреть профиль Отправить личное сообщение для darksranger Посетить домашнюю страницу darksranger Найти все сообщения от darksranger
  № 5  
Ответить с цитированием
darksranger
 
Аватар для darksranger

блогер
Регистрация: Jun 2007
Адрес: in sankt - peterburg
Сообщений: 787
Записей в блоге: 2
Отправить сообщение для darksranger с помощью ICQ
зачем выдумывать велосипед ?
Код AS3:
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.
Старый 18.11.2008, 09:43
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 6  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
Код AS3:
package 
{
	import flash.text.TextField;
 
	public class MyTextField extends TextField 
	{
		public var id:int;
 
		public function MyTextField(){
			super();
		}
	}
 
}
main class
Код AS3:
package 
{
	import flash.display.Sprite;
 
	public class Test extends Sprite 
	{
		public function Test(){
			var tf:MyTextField = new MyTextField();
			tf.id = 1;
		}
	}
 
}


Последний раз редактировалось CrazyFlasher; 18.11.2008 в 09:49.
Старый 18.11.2008, 13:48
faust.d503 вне форума Посмотреть профиль Отправить личное сообщение для faust.d503 Найти все сообщения от faust.d503
  № 7  
Ответить с цитированием
faust.d503
 
Аватар для faust.d503

Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
darksranger
Спасибо. Пожалуй вот этот вариант подходит, про объект я подумал, а вот про Dictionary, как-то нет...

CrazyFlasher
Зачем отвечать на вопрос, который не был задан. Я не спрашивал как расширить класс TextField, меня интересует решение проблемы без расширения класса.
Расширить класс проблемы не составляет.

DarkLight
Цитата:
Кстати, стандартный trace для собственных классов меняется путем override-а метода toString() в классах, который вызывается на переданному trace объекту, если последний не является строкой.
Для собственных классов да, а для Object или Array - нет. Получается, что логика в as3 предлагает вообще не пользоваться стандартными классами если они чем-то не устраивают. Что тоже не всегда удобно, так как наследников внесенные изменения не коснуться.

Цитата:
Использование прототипов негативно влияет на производительность.
Интересно. По идее с точки зрения программы система прототипов и классов - это одно и тоже.
Как мне казалось, прототипы не рекомендуют использовать только из-за того, что класс на ходу можно переделать.


Последний раз редактировалось faust.d503; 18.11.2008 в 13:51.
Старый 18.11.2008, 13:54
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 8  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
Сообщение от faust.d503 Посмотреть сообщение
Зачем отвечать на вопрос, который не был задан. Я не спрашивал как расширить класс TextField, меня интересует решение проблемы без расширения класса.
Расширить класс проблемы не составляет.
Затем, что это есть true way.

Старый 18.11.2008, 14:13
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 9  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
Цитата:
Зачем отвечать на вопрос, который не был задан. Я не спрашивал как расширить класс TextField, меня интересует решение проблемы без расширения класса.
Расширить класс проблемы не составляет.
ок, занимайтесь порнографией дальше

Старый 18.11.2008, 14:38
faust.d503 вне форума Посмотреть профиль Отправить личное сообщение для faust.d503 Найти все сообщения от faust.d503
  № 10  
Ответить с цитированием
faust.d503
 
Аватар для faust.d503

Регистрация: Nov 2008
Адрес: Москва
Сообщений: 52
CrazyFlasher
Решение поставленной задачи - порнография? Забавно...
Ситуация, в которой описанный метод не подходит:
На таймлайне есть куча текстовых полей - расставленных, например, художником, с ними надо производить какие-то действия.

mre
Цитата:
Затем, что это есть true way.
Верных путей много. Верный путь пользоваться только тем, что советует Adobe?


В общем можно отвечать на вопросы, а можно повышать чувство собственной важности, написав, то, что и так известно и спрашивающему и отвечающему.


Еще раз насчет прототипов. Откуда информация о том, что их использование влияет на производительность?
Это странно как минимум по вот этой причине:
Цитата:
Каждый класс и внутриклассовая функция (метод), созданные в ActionScript 3.0 имеют прототипный объект связанный с ними.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:50.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.