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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.02.2012, 00:36
Halfist вне форума Посмотреть профиль Отправить личное сообщение для Halfist Найти все сообщения от Halfist
  № 11  
Ответить с цитированием
Halfist

Регистрация: Feb 2012
Сообщений: 63
Спасибо! Возможно, не по теме, но сразу же возникает другой (крайне важный) вопрос (в реализуемой задаче): как преобразовать строку "имя_класса" в имя_класса таким образом, чтобы AS воспринял имя_класса именно как имя класса, а не как строку?

Тобишь, в чём суть..

Приходит строка (через JSON), которая совпадает с названием класса (заранее заготовленным во Flash). Нужно создать экземпляр этого класса, используя в качестве названия класса не строку, а то, что в этой строке содержится.

Код AS3:
var ex:Имя_класса = new Имя_класса;
Слой1.addChildAt(ex, 0);
ex.x = 300;
ex.y = 300;
Так я создаю ex при задании имени класса вручную. Как создать ex, если имя класса должно быть получено из строки (например, такой: var s = "Имя_класса")?

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
getDefinitionByName("NewClass");
__________________
тут я

Старый 10.02.2012, 01:27
Halfist вне форума Посмотреть профиль Отправить личное сообщение для Halfist Найти все сообщения от Halfist
  № 13  
Ответить с цитированием
Halfist

Регистрация: Feb 2012
Сообщений: 63
Спасибо! С классом всё прокатило на "Ура!". Правда, пришлось использовать следующую конструкцию:
Код AS3:
var className:Class = getDefinitionByName(переменная_типа_string) as Class;
var ex:DisplayObject = new className();
layer1.addChildAt(ex, 0);
А как по такому же принципу динамически создать массив (с именем, которое приходит в качестве строки)? Т.е. приходит, к примеру, строка "Имя_массива_1" и программно нужно создать массив с таким же именем.

Старый 10.02.2012, 01:42
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 14  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Никак.
Но можно извратиться до такого:
Код AS3:
var myArray:array = [];
myArray["Имя_массива_1"] = [];
и получать к нему доступ через myArray["Имя_массива_1"]
__________________
тут я

Старый 10.02.2012, 13:41
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 15  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Принципиально возможны следующие варианты:

1. Создать массив заранее и затем обратиться к нему, используя полученное строковое имя, через следующий синтаксис:

Код AS3:
  this["arrayName"]
или (если обращение к массиву из вне класса)

Код AS3:
 
  someObject["arrayName"]
и дальше ваши манипуляции с ним.

2. Объявить класс, в котором вы намерены создавать массив, динамическим - dynamic, тогда
действительно возможно создание массива в ходе выполнения программы. Как то так:


Код AS3:
 
     //создаем
     this["arrayName"] = new Array();
 
    //обращаемся
    this.arrayName.push("some object");
 
   //обращаемся снаружи класса
   trace( someDynamicClass.arrayName[0] ); //some object (string);
Но - 99%, что если вам требуются такие возможности значит вы используете не правильный подход
при создании своей программы. ) Подумайте - что нужно сделать, чтобы вам такие способы не нужны были.

* Использование динамических классов крайне не желательно. Это затруднит отладку и замедлит выполнение программы, т.к. программа не располагает перечнем полей класса на момент обращения к нему.

Старый 13.02.2012, 14:11
Halfist вне форума Посмотреть профиль Отправить личное сообщение для Halfist Найти все сообщения от Halfist
  № 16  
Ответить с цитированием
Halfist

Регистрация: Feb 2012
Сообщений: 63
Всем большое спасибо за дельные советы!

Цитата:
Сообщение от fish_r Посмотреть сообщение
...99%, что если вам требуются такие возможности значит вы используете не правильный подход при создании своей программы.
Сам уже не раз об этом думал..

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

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Цитата:
Сообщение от КорДум Посмотреть сообщение
Никак.
Но можно извратиться до такого:
Код AS3:
var myArray:array = [];
myArray["Имя_массива_1"] = [];
и получать к нему доступ через myArray["Имя_массива_1"]
Ну тогда бы Object.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

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

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

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


 


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


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