1

所以,我正在编写一个 AS3 程序来平铺地砖。我希望用户能够创建自己的由不同矩形表示的楼层示意图。这将是拖放。他们将布置他们的示意图(由不同大小的矩形瓷砖组成)并将颜色/图案拖放到它们上。

然后将该示意图平铺在 3D 平面上,以表示实际地板的外观。

我已经完成了 3D 部分的工作、拖放工作等。我缺少的是地板示意图的东西。我花了很多时间试图找出最好的解决方案,但我不能完全到达那里。

这里有一些例子(从一大堆可能的组合中)地板示意图的外观:

替代文字

替代文字

替代文字

替代文字

示意图中的不同图块是可放置区域。我的问题:如何用 XML 表示这些示意图?不用担心平铺、尺寸等。我已经弄清楚了。我只是不知道如何在 XML 中表示瓷砖原理图并使用 AS3 正确绘制它。有任何想法吗?

4

4 回答 4

3

在我看来,您的瓷砖真的可以归结为网格上的布局。鉴于此,我会让图块的 xml 由元素列表组成,每个元素将具有元素左上角正方形的行/列的属性,该元素的行跨度和列跨度,以及填充该元素。像这样的东西:

<Tile>
    <Cell row="0" col="0" rowSpan="1" colSpan="4" fill="#a0a0a0"/>
    <Cell row="1" col="0" rowSpan="1" colSpan="4" fill="#b0b0b0"/>
    <Cell row="0" col="4" rowSpan="2" colSpan="2" fill="#c0c0c0"/>
    <Cell row="2" col="2" rowSpan="1" colSpan="4" fill="#a0a0a0"/>
    <Cell row="3" col="2" rowSpan="1" colSpan="4" fill="#b0b0b0"/>
    <Cell row="2" col="0" rowSpan="2" colSpan="2" fill="#c0c0c0"/>
</Tile> 

以上将代表您的第一个示例(尽管我编了颜色)。希望有帮助。

于 2010-06-28T16:06:24.787 回答
0

为简单起见,您可能需要考虑使用 x、y、宽度、高度值。flash.geom.Rectangle那就是flash.display.Graphics.drawRect()使用的格式。

<tile x="20" y="20" width="400" height="200" pattern="1" />
<tile x="20" y="220" width="100" height="100" pattern="2" />
于 2010-06-28T15:52:07.973 回答
0

免责声明:我不是最擅长编写 XML 的人。例如,<Cell x="0" y="1" tile="no"/>可能会很痛苦,因为它使 xsd 模式更加复杂——也就是说:如果 tile = no,它不应该有子级。如果 tile = yes,那么它必须有孩子。另请注意,您需要返工<RgbColor>LightGrey</RgbColor>。另请注意,我不知道元素和属性之间的最佳权衡是什么。另请注意,我不喜欢<Cells>-<Cell>错字机会。但是,我不知道更好的方法,但想知道那可能是什么。此外,也许这种格式太冗长了。另外,我没有包含 xsd 架构,但您可以从这里开始:http ://www.google.com/search?hl=en&q=xsd+schema+generator&aq=f&aqi=&aql=&oq=&gs_rfai=

同样受到另一个答案的启发,您可能希望单独定义图案颜色,然后参考它们......可能容易出错。

<?xml version="1.0" encoding="utf-8"?>
<TileSchematics name="Blah" comment="This starts to describe second one.">
  <BoundingBox>
    <Width>8</Width>
    <Height>3</Height>
    <StackHorizontally>yes</StackHorizontally>
    <StackVertically>no</StackVertically>
  </BoundingBox>
  <Cells>
    <Cell x="0" y="0" tile="yes">
      <RgbColor>LightGrey</RgbColor>
      <Border>
        <Right>yes</Right>
        <Left>yes</Left>
        <Top>yes</Top>
        <Bottom>yes</Bottom>
      </Border>
    </Cell>
    ...
    <Cell x="0" y="1" tile="no"/>
    ...
  </Cells>
</TileSchematics>
于 2010-06-28T15:52:19.570 回答
-1

为什么是 XML?为什么不使用 AMF3 对其进行序列化?或者如果你需要一些人类可读的东西,JSON应该这样做。JSON 具有与 ECMA-script 完全相同的对象语义,是 ECMA-script 的一个子集,而 XML 没有,这使得使用 XML 非常烦人。

将第一个示意图表示为对象结构:

[
    {"x":0, "y":0, "width":100, "height":25, "pattern":0 },
    {"x":0, "y":25, "width":100, "height":25, "pattern":1 },
    {"x":100, "y":0, "width": 50, "height":50, "pattern":2 },
    {"x":50, "y":50, "width":100, "height":25, "pattern":0 },
    {"x":50, "y":75, "width":100, "height":25, "pattern":1 },   
    {"x":0, "y":50, "width": 50, "height":50, "pattern":2 }
]
//this is both valid JSON and ActionScript, although in ActionScript, you would
//typically use identifiers instead of strings for property names

您可以使用as3corelib进行序列化

问候
back2dos

于 2010-06-28T22:10:10.910 回答