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

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

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
По умолчанию getDefinitionByName-переменная не определена

Раньше использовал эту возможность, но почему-то проблем не возникало, а сегодня - нате!
Основной класс:
Код AS3:
package{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.getDefinitionByName;
	public class Main extends Sprite{
		private var cl:Class;
		public function Main():void{
			addEventListener(Event.ADDED_TO_STAGE, onStage, false, 0, true);
		}
		private function onStage(e:Event):void{
			trace("onStage");
			trace(cl);
			cl=getDefinitionByName("Test") as Class;
		}
	}
}
Ну и собственно Test.as, лежащий в той же папке:
Код AS3:
package{
	public class Test{
		public function Test():void{
			trace("test");
		}
		public function foo():void{
			trace("foo");
		}
	}
}
Вся эта конструкция выдает
Код:
onStage
null
ReferenceError: Error #1065: Переменная Test не определена.
	at global/flash.utils::getDefinitionByName()
	at Main/onStage()
Что эта ошибка означает - знаю, а вот почему она выскакивает - не могу понять. Может кто-то объяснить почему так происходит и что с этим делать? Заранее спасибо.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 04.07.2010, 14:48
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
или я резко ошибаюсь, или "лежащий в той же папке" класс и не должен быть доступен. он должен быть вкомпилен в основной swf или в один из подгруженных — не?
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Даже если я его импортирую - картина та же. Или я не правильно понял?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 04.07.2010, 14:58
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
как я понял, умный компилятор не станет вставлять классы, которые не использованы ни разу, даже если они импортированы.
поэтому я помимо:
Код AS3:
import MyClass
прописываю:
Код AS3:
private var INIT_MyClass:MyClass
и все работает.
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Ну хорошо, а допусти у меня миллион (утрирую) таких классов. Не прописывать же все подряд. Думаю должен быть более элегантный выход из ситуации.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Mar 2008
Сообщений: 259
getDefinitionByName("Test") - это элегантный выход?? Да он в стопицот раз медленнее вышеупомянутого

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
прописывать. все подряд.
а зачем ты используешь getDefinitionByName()?
__________________
Поймай яблоко 2!

Старый 04.07.2010, 15:25
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 8  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Т.е. для того чтоб использовать только нужный мне класс (возможно один) я должен прописывать все (весь миллион), даже не смотря на то, что они, возможно, мне и не понадобятся?
Ситуация такова:
Есть ряд предустановленных событий, при наступлении которых запускаются определенные методы текущего класса. А вот то, какой именно класс при этом будет работать и определяется с помощью getDefinition.

Если уж на то пошло, то почему бы не прописать все классы в векторе и дергать их оттуда - по сути будет тоже самое, что и прописывать весь миллион. Но это же не правильно. Или я не прав? Если да, то в чем?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Mar 2008
Сообщений: 259
Ну можно, положив миллион классов в пакет, заимпортировать пакет my.test.*. Ну и там если есть предустановленные события сделать общий интерфейс для них и т.п. Ну и типом для передачу в функции указывать базовый для всех них тип. Получается разница будет только в конструкторе.

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Т.е. для того чтоб использовать только нужный мне класс (возможно один) я должен прописывать все (весь миллион), даже не смотря на то, что они, возможно, мне и не понадобятся?
это зачем это?
ты так и не поведал, зачем тебе такие ходы? чего нельзя явно создать экземпляр класса?
__________________
Поймай яблоко 2!

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

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

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


 


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


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