2

我的瓷砖引擎来了。它可以绘制正方形、六边形和等距的交错视点。我苦苦挣扎的地方是等距旋转(或菱形)视点。下面是一张 10x10 菱形地图的图片和用于绘制它的(简化的)代码。瓷砖是 128x64。

http://garrypetett.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

我不确定我是否可以了解您的问题的详细信息,但是如果您只是想根据 and 来解决和的x公式,那么ycolumnrow

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 回答