2

私のタイルエンジンがやってくる。正方形、六角形、等尺性の千鳥状の視点を描くことができます。私が苦労しているのは、等角回転(またはダイアモンド)視点です。以下は、10x10のダイアモンドマップとそれを描画するために使用される(簡略化された)コードの写真です。タイルは128x64です。

http://garrypettet.com/images/forum_images/5%20col%20x%205%20rows.png

for row = 0 to rowLimit

  for column = 0 to columnLimit

    x = column * (TileWidth/2) + (row * (TileWidth/2)) + Origin.X
    y = (column * (TileHeight/2)) - (row * (TileHeight/2)) + Origin.Y

    // Draw the tile's image
    buffer.Graphics.DrawPicture(Tiles(column, row).Image, x, y)

  next column

next row

// Draw the buffer to the canvas
g.DrawPicture(buffer, 0, 0)

これにより、画面に表示されているものだけでなく、Tiles()全体のコンテンツが描画されることはわかっていますが、最初に基本を理解しようとしています。

私が理解できないのは、マップ上のx、y座標をタイル列、行座標に変換する簡単な方法です。私は逆転しようとしました:

x = column * (TileWidth/2) + (row * (TileWidth/2)) + Origin.X
y = (column * (TileHeight/2)) - (row * (TileHeight/2)) + Origin.Y

xとyを指定して列と行を計算し、これを思いついた場合:

column = ((x/2) - (Origin.X/2) + y + Origin.Y) / TileHeight
row = ((x/2) - (Origin.X/2) - y - Origin.Y) / TileHeight

しかし、それはうまくいかないようです。誰かがこれを行うためのより良い方法を考えることができますか?長方形のグリッドをひし形に変換して元に戻すためのより良い方法はありますか(行列についてほとんど知らない場合...)。

ありがとう、

4

1 に答える 1

2

私はあなたの問題の詳細をたどることができるかどうかはわかりませんが、あなたがあなたの公式をxyの観点から解決しようcolumnとしているだけならrow

column=(x + y - (Origin.X + Origin.Y))/TileWidth
row = (x - y - (Origin.X - Origin.Y))/TileHeight

これらの式を取得する最も簡単な方法は、最初にとの式を追加してxy解きcolumn、次にそれらを減算してを解くことですrow

于 2011-01-07T14:30:46.923 に答える