如何将2D游戏上的拼贴坐标转换为c ++中的像素坐标

时间:2017-07-17 23:19:27

标签: c++ coordinates pixel tile coordinate-transformation

我正在使用c ++和SDL开展塔防游戏。我希望我的敌人在路上开始,但每个级别的开始都在不同的位置。我可以硬编码像素但是在确定敌人在测试和游戏进行过程中产生的确切位置时可能看起来有些混乱。我这样做的方式对我来说有点多余,我会稍微调整一下。但我很好奇是否有比我正在做的更好的方法。

在我的Tile类中,我有两个静态函数,当我需要将tile坐标转换为像素坐标时,我调用它。

static int ConvertTileToPixelX(int tileX, int tileSize, int scale) { return tileX * tileSize * scale; }
static int ConvertTileToPixelY(int tileY, int tileSize, int scale) { return tileY * tileSize * scale; }

正如您所看到的,功能是相同的,将3个参数相乘。我可以把它变成一个函数,但是为了便于阅读,当我调用这些函数时会更容易。现在,由于这些是静态函数,我无法访问我对tile(包含scale和tilesize)的变量,这就是我将它们设置为参数的原因。现在,每当我在创建敌人时调用这些函数,我都必须输入:

enemy(Tile::ConvertTileToPixelX(0, TILEWIDTH, SCALE), Tile::ConvertTileToPixelY(12, TILEHEIGHT, SCALE), ...)

你可以看到它看起来很时髦lol。我想要这样的事情:

enemy(Tile::ConvertTileToPixelCoords(0, 12), ...)

注意:我正在构造函数中创建敌人(初始化列表)。

有没有更简单的方法来实现我正在做的事情?我是否在思考?

1 个答案:

答案 0 :(得分:0)

通常,代码使用矩阵来存储线性变换。

有两种类型;一个TileLoc和一个PixelLoc。他们同时存储xy

Tile2Pixel定义为* TileLoc返回PixelLoc时的类型,Pixel2Tile执行相反的操作。同样,TileLoc/Tike2Pixel=PixelLoc

它包含比例/宽度/高度信息。

enemyPixelLoc,而不是x和y。

enemy(TileLoc{0,12}*m_TileToPixel)

构建敌人。

Tile2Pixel 可以使用矩阵。或许不值得。