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

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

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

Регистрация: May 2012
Сообщений: 10
Question Проверка существования класса

Много уже нарыл здесь...
Только не получаеса!

Значитса классы для звуков я определяю так:
Код AS3:
[Embed(source = "../../lib/Source/Battle/sound/1/1.mp3")] private var Bs_1_1_cls : Class;
[Embed(source = "../../lib/Source/Battle/sound/1/2.mp3")] private var Bs_1_2_cls : Class;
...
[Embed(source = "../../lib/Source/Battle/sound/2/1.mp3")] private var Bs_2_1_cls : Class;
[Embed(source = "../../lib/Source/Battle/sound/2/2.mp3")] private var Bs_2_2_cls : Class;
..
[Embed(source = "../../lib/Source/Battle/sound/n/1.mp3")] private var Bs_n_1_cls : Class;
[Embed(source = "../../lib/Source/Battle/sound/n/2.mp3")] private var Bs_n_2_cls : Class;
      ...[Embed(source = "../../lib/Source/Battle/sound/n/m-1.mp3")] private var Bs_n_m-1_cls : Class;
         [Embed(source = "../../lib/Source/Battle/sound/n/m.mp3")] private var Bs_n_m_cls : Class;
Затем для создания объектов на основе этих классов
Определяю массив
Код AS3:
public var SoundObj : Array = new Array();
Далее в коде хочу сослатся на эти классы и получить объекты в массиве!
Код AS3:
var RabArrSound : Array;	
for (i= 1; i <= n ; i++) {	
           if (this["Bs_" + String(i) + "_1_cls"]) {
		RabArrSound = new Array();
		SoundObj[i] = RabArrSound;
	}else{
		break;
	}	
	for (var j:int = 1; j <= m ; j++) {	
		 if (this["Bs_" + String(i) + "_" + String(j) + "_cls"]) {			 
			SoundObj[i][j] = new this["Bs_" + String(i) + "_" + String(j) + "_cls"]();
		}
	}
}
Для корректного обращения в ходе программы.


- m - для различных i могут быть разные; поэтому берется максимальное значение!
- (т.е. нужна проверка на существование классов(что и видно в коде))
- кроме того некоторые i - в классах могут отсутствовать (смотреть предвдущий пункт)

Выдает ошибку при обращении к несуществующему классу

Код AS3:
if (this["Bs_" + String(i) + "_1_cls"]) {
...
 if (this["Bs_" + String(i) + "_" + String(j) + "_cls"]) {
...
Какую проверку здесь можно использовать, чтобы не заморачиватся на наличие или отсутствие класса?


Пробовал:
ApplicationDomain.currentDomain.hasDefinition
Как здесь советовали:
http://www.flasher.ru/forum/showthre...=111716&page=2

Но на все запросы:
Код AS3:
ApplicationDomain.currentDomain.hasDefinition("Bs_" + String(i) + "_" + String(j) + "_cls")
Выдает false

try catch использовать не хочу...

Подскажите что в этом случае можно сделать...

Старый 23.05.2012, 15:54
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
У вас не проверка существования класса. У вас проверка наличия поля. Сам класс имеет другое имя (потрейсите ваш Bs_1_1_cls). Может, Object.hasOwnProperty(String) поможет?

Старый 23.05.2012, 15:57
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 3  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Код AS3:
if (this["Bs_" + String(i) + "_1_cls"]) {
замените на
Код AS3:
if (("Bs_" + String(i) + "_1_cls") in this) {
должно помочь

Старый 23.05.2012, 16:10
V01D вне форума Посмотреть профиль Отправить личное сообщение для V01D Найти все сообщения от V01D
  № 4  
Ответить с цитированием
V01D

Регистрация: May 2012
Сообщений: 10
maxkar
Код AS3:
Object.hasOwnProperty(String)
false на все объекты
в качестве Object - this

i.o.
Код AS3:
("Bs_" + String(i) + "_1_cls") in this
тоже false на все объекты!

при этом если оставить
Код AS3:
this["Bs_" + String(i) + "_" + String(j) + "_cls"]
n=6
m=3
все объекты от 1 до 6
задаются по 3
кроме последнего 6-го
т.е. объекта SoundObj[6][3] - не существует


то при компиляции доходит до этого объекта
и если посмотреть массив SoundObj он заполнен
т.е. объекты ЕСТЬ



Последний раз редактировалось V01D; 23.05.2012 в 16:52. Причина: ошибка в параметрах (m поменялся местами с n)
Старый 23.05.2012, 18:43
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
maxkar
Код AS3:
Object.hasOwnProperty(String)
false на все объекты
Угу, потому что поля приватные.

Наличие классов вряд ли удастся посмотреть - они там с постфиксами по настроению компилятора генерируются при таком эмбединге.

Если нужно просто пройтись по списку, то я бы так сделал:
1. Поменять все поля на публичные
2. Получить xml-ку через describeType(this)
3. Прочитать все названия полей из этой xml-ки и вызвать их через this[fieldName]

Ну, или просто, как вы делали, но с публичными полями и проверкой hasOwnProperty

Старый 23.05.2012, 21:03
V01D вне форума Посмотреть профиль Отправить личное сообщение для V01D Найти все сообщения от V01D
  № 6  
Ответить с цитированием
V01D

Регистрация: May 2012
Сообщений: 10
Ура СПАСИБО...

И это
Object.hasOwnProperty(String)
И это
("Bs_" + String(i) + "_1_cls") in this

при паблик работает!

Хотелось бы (для общего развития) знать в чем отличие!...
И почему как привейт не видит?


Еще раз СПАСИБО

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

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

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


 


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


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