Представление вложенных папок в виде DisplayObjects

#xml #actionscript-3 #actionscript

#xml #actionscript-3 #actionscript

Вопрос:

Я работаю над world builder, который загрузит инструментарий, представленный XML-документом. Документ будет выглядеть следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<toolkit>
    <folder name="environment">
        <folder name="terrain">
            <tool name="grass">
                <classname>game.terrain.Grass</classname>
                <layer>terrain</layer>
            </tool>
            <tool name="dirt">
                <classname>game.terrain.Dirt</classname>
                <layer>terrain</layer>
            </tool>
            <tool name="water">
                <classname>game.terrain.Water</classname>
                <layer>water</layer>
            </tool>
        </folder>
        <folder name="mobile">
            <folder name="enemies">
                <tool name="youngzombie">
                    <classname>game.mobiles.YoungZombie</classname>
                    <layer>mobiles</layer>
                </tool>
                <tool name="zombie">
                    <classname>game.mobiles.Zombie</classname>
                    <layer>mobiles</layer>
                </tool>
            </folder>
        </folder>
        <tool name="player">
            <classname>game.mobiles.Player</classname>
            <layer>mobiles</layer>
        </tool>
</toolkit>
  

Теперь я хочу иметь возможность представлять эту структуру во flash. Вертикальная компоновка достаточно проста, просто размещая элементы сверху вниз. Это становится ошеломляющим, когда мне нужно сделать следующее:

  1. Иметь возможность щелкнуть любую папку, и все ее дочерние элементы будут скрыты / показаны.
  2. Расположите элементы горизонтально на основе иерархического положения (выделите дочерние элементы папок, дочерние элементы дочерних папок и т.д.)
  3. Расположите папки / инструменты вертикально, если папки выше и в том же «каталоге» скрыты.

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

Просто чтобы избежать путаницы — когда я ссылаюсь на «папки» и «инструменты», это видеоролик, который представляет собой простой блок с текстом поверх него, например:

 ------
folder
------
    ------
    folder
    ------
        ----
        tool
        ----
        ----
        tool
        ----
    ------
    folder
    ------
        ----
        tool
        ----
----
tool
----
  

Комментарии:

1. Привет, Марти, тебе определенно следует использовать Flex и дерево!

2. @Kodiak Спасибо :), не могли бы вы предоставить ресурс, который объяснил бы, что такое дерево и как я мог бы его реализовать?

3. Он ссылается на древовидный список. livedocs.adobe.com/flex/3/html /… .

Ответ №1:

Я делаю то же самое без использования дерева, потому что макет мне не подходит (мобильное приложение). Вы можете создать для каждого из них файл, который считывает каждый элемент в вашем xml, и добавить к каждому тегу родительский элемент, а к элементу — его дочерние элементы. Я создаю представление с помощью TileList и даю arraylist в качестве dataprovider-тега, который заполняется элементами xmlфайла. Список будет изменен нажатием на элемент или предыдущую кнопку. Вы можете внести изменение onDataChange в свой TileList itemrenderer, который воссоздаст TileList с использованием новых данных в вашем arraylist, если вы нажмете на элемент, который вы можете показать дочерним элементам. Если вы щелкните предыдущую папку, вы можете отобразить родительский объект (у которого есть свои дочерние объекты).

Не знаю, понимаете ли вы принцип работы. Если у вас есть какие-то вопросы по этому поводу, просто спросите ;).