Tileset裁剪计算C ++

时间:2014-07-02 12:23:08

标签: c++ map draw crop tile

所以我的tileset渲染有这个问题。解释起来有点棘手,但我会尽我所能。

基本上我所做的是从TMX文件加载这些“图块编号”,它们只代表图块集中的图块集编号。因此,如果我使用位于第一行下方的一块瓷砖,我只能获得该数字。但我希望X和Y位置都能计算我在游戏中显示图像时裁剪图像的位置。

所以我的数组看起来像这样,

1,1,1,2,1,1,1,1,9,1,6,1,1
1,1,1,2,2,2,1,1,1,1,1,1,1
1,1,1,1,1,2,1,1,1,1,1,1,1
1,1,1,1,1,2,1,1,1,3,1,1,1
1,6,1,1,1,2,1,1,1,1,1,1,1
1,1,5,5,1,2,2,2,1,1,1,1,1
1,1,1,1,1,1,1,2,1,1,1,1,1

地形设置: http://puu.sh/9Tv2X/7938b6abf4.png

所以当我渲染这个图块集中第一行中的所有图块时,数字1-4(因为图块集长度为4个图块),它可以正常工作,但过去的任何图片都会在图像外部被裁剪。

因此,我需要Y位置增加并在每次超出tileset宽度(32 *(tileNumber - 1))时重置X位置,但我的大脑无法弄清楚如何执行此操作。

瓷砖宽度和高度为32。

我绘制tilset的代码:

void TileMap::Draw()
{
    for (unsigned int i = 0; i < mapVector.size(); i++)
    {
        for (unsigned int j = 0; j < mapVector[i].size(); j++)
        {
            int tileY = 0;
            int tileX = mapVector[i][j] - 1;

            if (tileWidth * mapVector[i][j] > tilesetWidth)
            {
                //now what
            }



            if (mapVector[i][j] > 0)
            {
                tileSprite->SetPosition(j * tileWidth, i * tileHeight);
                tileSprite->SetTextureRect(tileX * tileWidth, tileY * tileHeight, 32, 32);
                tileSprite->Draw();
            }
        }
    }
}

0 个答案:

没有答案