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

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

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

Регистрация: May 2007
Сообщений: 232
По умолчанию Как связать узлы XML c графическими Sprite`ами

Добрый день!
Подскажите пожалуйста найти рациональное решение задачи.
Я пишу редактор, представляющий собой инструмент, позволяющий располагать на холсте пиктограммки.
Данные сохраняемые редактором помещаются в XML примерно такого вида:
Код:
<objects>
  <object name="FirstObject" x="25" y="70" icon="FirstIcon"/>
  <object name="FirstObject" x="25" y="70" icon="SecondIcon"/>
  ...

</objects>
В процессе работы редактора мне необходимо как-то связывать XML узел и сам объект на экране.

Эту задачу я решил так:
- после загрузки сохраненного XML файла создаю временный уникальный атрибут id для каждого узла. И в каждом графическом объекте храню id узла на который он ссылается;
- при создании нового объекта - присваиваю ему новый id, так чтобы он не повторился.
- при сохранении в файл, удаляю временные атрибуты id из XML.

Подскажите насколько это верное решение. Может есть более простой и рациональный способ решить эту задачу.
Заранее благодарен.

Старый 18.01.2009, 16:46
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 2  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Не надо создавать никаких ID.
В каждый графический объект можно передавать ссылку на конкретный элемент XML и все.

Старый 18.01.2009, 17:00
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 3  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
На сколько я понимаю - передать ссылку на XML элемент невозможно.
При передаче элемента будет создана копия узла.
Кстати только что попробовал это сделать.

Старый 18.01.2009, 17:18
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Роман Вадимович Посмотреть сообщение
На сколько я понимаю - передать ссылку на XML элемент невозможно.
При передаче элемента будет создана копия узла.
Кстати только что попробовал это сделать.
Да ну, неужели копия? Покажите.

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

Регистрация: Jun 2007
Сообщений: 374
Можно передавать ссылку. Копий узла не создается.

Код AS3:
var xml:XML = <data>
<item name="item0"/>
<item name="item1"/>
<item name="item2"/>
</data>
 
trace (xml);
 
var obj:Object = new Object();
obj["node0"] = xml.item[0];
trace (obj["node0"].@name);
obj["node0"].@name = "item0Modified";
 
trace (xml)
p.s. а вообще я бы распарсил XML и создал массив объектов-моделей с нужными свойствами. Способ муторнее, но позволяет отслеживать изменения в объектах с помощью событий


Последний раз редактировалось s8000_1; 18.01.2009 в 17:17.
Старый 18.01.2009, 17:34
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 6  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
Cпасибо s8000_1, Ваш пример работает.

Цитата:
Да ну, неужели копия? Покажите.
Вот пример из книжки Мука:
Цитата:
References to Parts of a Document Are Not Live
As you change or add new content to an XML object, bear in mind that any updates you make will not be reflected by variables that refer to part of that document. For example, the following code creates a variable, children, that a refers to <BOOK>’s
child nodes:
Код AS3:
var novel:XML = <BOOK ISBN="0141182806">
<TITLE>Ulysses</TITLE>
<AUTHOR>Joyce, James</AUTHOR>
<PUBLISHER>Penguin Books Ltd</PUBLISHER>
</BOOK>
var children:XMLList = novel.*;
If we now remove the <PUBLISHER> element, the change is made to the original document, but is not reflected by the children variable:
Код AS3:
// Remove <PUBLISHER>
delete novel.PUBLISHER;
trace(novel);
// Displays: <BOOK ISBN="0141182806">
// <TITLE>Ulysses</TITLE>
// <AUTHOR>Joyce, James</AUTHOR>
// </BOOK>
trace(children);
// Displays: <TITLE>Ulysses</TITLE>
// <AUTHOR>Joyce, James</AUTHOR>
// <PUBLISHER>Penguin Books Ltd</PUBLISHER>
// <PUBLISHER> is still there!
Future versions of E4X may support live references to parts of a document.
Предполагаю, что я не до конца разобрался

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

Регистрация: Jun 2007
Сообщений: 374
Не до конца разобрались.
Код AS3:
var children:XMLList = novel.*;
создает объект children со ссылками на элементы из другого XML. Когда Вы делаете delete, вы удаляете ссылку из этого объекта, а не сам элемент.

Ссылки как работали, так и работают.
Код AS3:
var novel:XML = <BOOK ISBN="0141182806">
<TITLE>Ulysses</TITLE>
<AUTHOR>Joyce, James</AUTHOR>
<PUBLISHER>Penguin Books Ltd</PUBLISHER>
</BOOK>
var children:XMLList = novel.*;
children[0] = "acb";
delete novel.PUBLISHER;
children[0] = "acb";
trace(novel);
trace(children);
p.s. структура со сквозными ссылками на элементы XML хорошая, но крайне неудобная с точки зрения апгрейда.


Последний раз редактировалось s8000_1; 18.01.2009 в 17:44.
Старый 18.01.2009, 17:43
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 8  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
Да, точно. Спасибо за помощь!
Теперь понятно.

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

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

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


 


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


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