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

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

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
По умолчанию Создание объектов по XML

Описание игрового мира храню в базе данных. Есть скрипт PHP отдающий его в XML вида
Код:
<SectorMain>
  <Star id="1">
     <id>1</id>
     <sub_id>0</sub_id>
     <s_point_x>500</s_point_x>
     <s_point_y>300</s_point_y>
     <name>17</name>
     <img_path>img/graphic</img_path>
     <img_name>rock1</img_name>
     <img_ext>png</img_ext>
   </Star>
   <Planet id="1">
     <id>2</id>
     <sub_id>1</sub_id>
     <center_x>25</center_x>
     .... и т.п....
   </Planet>
</SectorMain>
Пытаюсь создавать объекты по описанию

Код AS3:
protected function CreateFromXML(Data:XML):void {
	// Создание сектора из XML
	for each (var Node:XML in Data.*) {
		if(Node.nodeKind()=="element") {
//			var s:Star = new Star();
//			var p:Planet = new Planet();
			trace(Node.name());
			var ClassReference:Class = getDefinitionByName(Node.name()) as Class;
			var Instance:Object = new ClassReference();
		}
	}
}
получаю ошибку
F:\VN Flash\Src\Vn.fla:
Star
ReferenceError: Error #1065: Variable Star is not defined.

Полазив по форуму нашел ответ в том, что классы должны где-то упоминаться для того, чтобы они были импортированы в swf (Все ответы для FD, у меня CS3). Но и даже с раскоментаренными первыми двумя строчками все равно не работает.
Подскажите, как решить проблему?

Старый 24.06.2011, 18:51
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Error #1065: Variable Star is not defined.
Компилятор же дал ответ.
проблема в этом:

Код AS3:
 Data.*
В ствойстве Data нет переменной звездочки

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от goodguy Посмотреть сообщение
Компилятор же дал ответ.
проблема в этом:

Код AS3:
 Data.*
В ствойстве Data нет переменной звездочки
Эта не та звездочка. Ругается компилятор, насколько я понимаю, на класс Star экземпляр которого я хочу создать через getDefinition.
А звездочка в

Код AS3:
 Data.*
это обращение к узлам XML-дерева. С ней все в порядке. Если закоментарить создание объектов по имени - никто ни на что не ругается.

Старый 24.06.2011, 20:17
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Импортировать забыли Star?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 24.06.2011, 20:28
Kidd002 вне форума Посмотреть профиль Отправить личное сообщение для Kidd002 Посетить домашнюю страницу Kidd002 Найти все сообщения от Kidd002
  № 5  
Ответить с цитированием
Kidd002

Регистрация: Apr 2004
Адрес: Россия, Москва
Сообщений: 60
Отправить сообщение для Kidd002 с помощью ICQ
Попробуйте получить имя класса с учетом его расположения.
То есть например вместо
Код AS3:
getDefinitionByName("Sprite")
написать
Код AS3:
getDefinitionByName("flash.display.Sprite")

Старый 24.06.2011, 20:30
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Эта не та звездочка. Ругается компилятор, насколько я понимаю, на класс Star экземпляр которого я хочу создать через getDefinition.
А звездочка в
Действительно. Уже туплю под вечер.

Это смахивает на проблему, которая была однажды в моем коде http://www.flasher.ru/forum/showthread.php?t=156321

Старый 24.06.2011, 20:30
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 7  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от dimarik Посмотреть сообщение
Импортировать забыли Star?
Star входит в package. Но даже если добавить в начало import Vn.Star; ошибка остается

Добавлено через 34 минуты
Цитата:
Сообщение от Kidd002 Посмотреть сообщение
Попробуйте получить имя класса с учетом его расположения.
То есть например вместо
Код AS3:
getDefinitionByName("Sprite")
написать
Код AS3:
getDefinitionByName("flash.display.Sprite")

Вот это сработало, спасибо.
В итоге работает только в таком виде:
Код AS3:
protected function CreateFromXML(Data:XML):void {
	// Создание сектора из XML
	for each (var Node:XML in Data.*) {
		if(Node.nodeKind()=="element") {
			Star;
			Planet;
			trace(Node.name());
			var ClassReference:Class = getDefinitionByName("Vn."+Node.name()) as Class;
			var Instance:Object = new ClassReference();
		}
	}
}
Vn - имя package

Старый 24.06.2011, 21:33
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 8  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Названия пакетов, переменных (возможно, кроме ClassReference), методов принято писать с маленькой буквы. С большой буквы пишутся названия классов. Ознакомьтесь с конвенциями по оформлению кода http://opensource.adobe.com/wiki/dis...ng+Conventions.

Цитата:
В итоге работает только в таком виде:
Естественно, надо полное имя указывать.


Последний раз редактировалось udaaff; 24.06.2011 в 21:35.
Старый 24.06.2011, 22:23
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 9  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от udaaff Посмотреть сообщение
Названия пакетов, переменных (возможно, кроме ClassReference), методов принято писать с маленькой буквы. С большой буквы пишутся названия классов. Ознакомьтесь с конвенциями по оформлению кода http://opensource.adobe.com/wiki/dis...ng+Conventions.
Я пишу на нескольких языках и в каждом своя нотация. Чтобы не поехала крыша от разных нотаций, я везде пишу одинаково. Это немного затрудняет прочтение, но на качестве кода к счастью не сказывается.

Цитата:
Сообщение от udaaff Посмотреть сообщение
Естественно, надо полное имя указывать.
Для new же не нужно указывать полные имена. А для getDefinition получается почему-то нужно...

Старый 24.06.2011, 22:50
derhab вне форума Посмотреть профиль Отправить личное сообщение для derhab Найти все сообщения от derhab
  № 10  
Ответить с цитированием
derhab
 
Аватар для derhab

Регистрация: Apr 2001
Адрес: Berlin
Сообщений: 1,862
Отправить сообщение для derhab с помощью ICQ Отправить сообщение для derhab с помощью Skype™
Цитата:
Сообщение от Korchy Посмотреть сообщение
Для new же не нужно указывать полные имена. А для getDefinition получается почему-то нужно...
ну вообще то в случае с new полный путь к классу в импорте прописан
__________________
freelance | Раздор

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

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

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


 


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


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