Как мне представить плитки в XML? - PullRequest
1 голос
/ 28 июня 2010

Итак, я пишу программу AS3, которая выкладывает плитки на пол. Я хочу, чтобы пользователь мог создавать свои собственные схемы этажей, представленные разными прямоугольниками. Это будет перетаскивание. Они выложат свою схему (которая состоит из прямоугольных плиток разного размера) и нанесут на них цвета / узоры.

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

У меня есть работающая 3D часть, работающая с перетаскиванием и т. Д. Что мне не хватает, так это схема пола. Я потратил много времени, пытаясь найти лучшее решение, но я не могу ПОЛУЧИТЬ его.

Вот несколько примеров (из целого ряда возможных комбинаций) того, как могут выглядеть схемы этажей:

alt text

alt text

alt text

alt text

Различные элементы мозаичного изображения в схеме являются выпадающими областями. Моя проблема: Как можно представить эти схемы в XML ? Не беспокойтесь о плитке, размерах и т. Д. Я уже все понял. Я просто буквально не знаю, как я могу представить схему листов в XML и правильно нарисовать ее с помощью AS3. Есть идеи?

Ответы [ 4 ]

3 голосов
/ 28 июня 2010

Мне кажется, что ваши плитки действительно сводятся к разметке на сетке. Учитывая это, я хотел бы, чтобы 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> 

Выше будет представлен ваш первый пример (хотя я придумал цвета). Надеюсь, это поможет.

0 голосов
/ 29 июня 2010

почему XML?почему бы просто не сериализовать его с помощью AMF3?или если вам нужно что-то читаемое человеком, JSON должно это сделать.JSON имеет точно такую ​​же семантику объектов, что и ECMA-скрипт, являясь подмножеством ECMA-скрипта, а 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 для сериализации .

greetz
back2dos

0 голосов
/ 28 июня 2010

Отказ от ответственности: я не лучший человек при написании XML. Например, <Cell x="0" y="1" tile="no"/> может быть проблемой, поскольку это усложняет схему xsd - а именно: если tile = no, у него не должно быть дочерних элементов. Если плитка = да, то она должна иметь детей. Также обратите внимание, что вам нужно переделать <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>
0 голосов
/ 28 июня 2010

Для простоты вы можете рассмотреть возможность использования значений x, y, width, height. Это формат, который используют 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" />
...