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

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

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
По умолчанию GetDefinitionByName создание собственного класса

Имеется несколько переменных с объявленным классом. К ним можно обращаться в цикле через this["someVar" + i].
Код AS3:
private var someVar0:CustomClass;
private var someVar1:CustomClass;
private var someVar2:CustomClass;
private var someVar3:CustomClass;
 
public function Asdf() {
	for (var i:uint = 0; i < 4; i++) {
		this["someVar" + i] = new CustomClass(); // здесь создаётся без ошибок
	}
}
А как можно обратиться к ним через ссылку, используя getDefinitionByName?

Пробовал разные способы, в том числе писать в цикле:
Код AS3:
var someString:String = "someVar" + i;
var itemClass:* = getDefinitionByName(someString) as Class; // здесь #1065
itemClass = new CustomClass();
Выдаёт: Error #1065: Переменная someVar0 не определена.
__________________
Нормально делай — нормально будет!

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Ну так в getFefinitionByName требуется строка с полным именем класса, а не "someVar0". Хотя, конечно, если Вы сделаете такой класс, то заработает:
Код AS3:
var c: Class = getDefinitionByName('flash.display::Sprite') as Class;
var s: Sprite = new c() as Sprite;
addChild(s);
В хелпе написано тоже самое. Вообще зачем Вам это нужно?
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 19.12.2011 в 23:22.
Старый 19.12.2011, 23:26
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ну такой вариант я вижу тока напрмер для сайта-студии что то типа

Код AS3:
function setLocation(loc:String):void {
 
var c: Class = getDefinitionByName(loc) as Class;
c.defineModule()
}
__________________
Марк Tween

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

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Код AS3:
var itemClass : Class = Object(this["someVar" + i]).constructor as Class;
var item : * = new itemClass();
Вам не это нужно?
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 20.12.2011, 02:47
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 5  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
требуется строка с полным именем класса
Класс подгружается из swc. Имя класса прописываю в самом начале (известная фича при работе с swc).
Код AS3:
CustomClass;
Добавлено через 19 минут
ChuwY
Работает, но не так как надо Необходимо, чтобы при этом в переменные ["someVar" + i] сохранялись созданные объекты, а в твоём варианте на выходе == null.
__________________
Нормально делай — нормально будет!

Старый 20.12.2011, 03:20
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Объясните как следует, что вам нужно.

Код AS3:
var someString:String = "someVar" + i; // здесь вы получаете имя переменной
var itemClass:* = getDefinitionByName(someString) as Class; // здесь вы пытаетесь по *имени переменной* получить ссылку на какой-то класс (какой именно вам нужен, мне не понятно) 
itemClass = new CustomClass(); // а здесь вы пытаетесь в переменную, хранящую ссылку на класс, записать ссылку на новый экземпляр известного вам класса
В общем, смысл ваших действий успешно ускользает.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 20.12.2011 в 03:25.
Старый 20.12.2011, 03:30
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 7  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Строка
Код AS3:
this["someVar" + i] = new CustomClass();
создаёт в переменной someVar+i объект класса CustomClass с определёнными параметрами, а я хотел избавиться от такой записи, используя getDefinitionByName, дабы повысить читаемость.
__________________
Нормально делай — нормально будет!

Старый 20.12.2011, 03:36
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Забудьте вы про
Код AS3:
this["someVar" + i]
Если нужно использовать упорядоченные по индексу наборы данных, так для этого есть массивы и векторы
Код AS3:
castomClassArray[i] = new CustomClass();
__________________
Отряд Котовскага

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Котяра, спасибо! Так действительно будет проще.
__________________
Нормально делай — нормально будет!

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

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

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


 


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


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