将嵌套文件夹表示为DisplayObjects

时间:2011-04-21 07:13:54

标签: xml actionscript-3 actionscript

我正在开发一个世界构建器,它将加载一个由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. 当隐藏文件夹上方和同一“目录”中的文件夹时,垂直放置文件夹/工具。
  4. 它听起来要比现在容易得多,或者我错过了一个重要而明显的步骤。

    为了避免混淆 - 当我引用“文件夹”和“工具”时,这些是一个MovieClip,它是一个带有文本的简单块,如:

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

1 个答案:

答案 0 :(得分:0)

我在不使用树的情况下也这样做,因为布局对我来说没用(移动应用程序)。 您可以为每个读取xml中每个元素的内容创建一个,并将父项和元素添加到每个标记中。 我使用tileList创建一个视图,并给出一个arraylist作为dataprovider-tag,其中填充了xmlfile的元素。单击项目或上一个按钮将更改列表。你可以在你的tileList itemrenderer中创建一个onDataChange,它通过你的arraylist中的新数据重新创建tileList 如果单击某个项目,则可以显示子项。 如果单击上一个文件夹,则可以显示父对象(具有自己的子对象)。

不知道你是否理解工作方式。如果您对此有疑问,请询问;)。