平滑的相机和平铺滚动c ++

时间:2015-09-28 11:36:03

标签: c++ sdl

  

我的相机上有50像素偏移。屏幕尺寸为640x480,带偏移的相机为690x530;平铺是16x16像素。   xy是屏幕的像素位置,   terrain是一系列瓷砖,   startTileXinCamera是相机上x轴最左侧的平铺,   startTileYinCamera是相机上y轴最左侧的图块,   tileXinCamera是相机在x轴上覆盖的平铺计数,   tileYinCamera是相机在y轴上覆盖的平铺计数,   tileCountX是x轴上的总图块数,不是屏幕上的,而是地形的总数。

我在2D环境中遇到相机和平铺滚动的问题。所以,基本上我想按像素平滑地滚动我的图块,而是每个图块滚动它看起来像“滞后”或者是口吃。

这是我的平铺渲染代码:

void Terrain::render(SDL_Renderer* renderer, Camera* camera)
{
    int x = 0, y = 0;
    int startTileXinCamera = camera->getCamera()->x / tileWidth;
    int startTileYinCamera = camera->getCamera()->y / tileHeight;
    int tileXinCamera = camera->cameraSizeToPositionX() / tileWidth;
    int tileYinCamera = camera->cameraSizeToPositionY() / tileHeight;

    for (int i = startTileYinCamera; i < tileYinCamera; i++)
    {
        for (int j = startTileXinCamera; j < tileXinCamera; j++)
        {
            terrainGraphic->render(renderer, x, y, tileClip[terrain[i * tileCountX + j]->type]);
            if (x < camera->getCamera()->w)
                x += tileWidth;
        }
        x = 0;
        if (y < camera->getCamera()->h)
            y += tileHeight;
    }
}   

问题:

如何按像素平滑地滚动我的图块并消除不需要的效果?

1 个答案:

答案 0 :(得分:1)

我弄明白了这个问题。我使用预定义的x,y坐标int x = 0,y = 0;和x + = tileWidth;放置瓷砖,而不是实际使用瓷砖的坐标。然后通过将图块的坐标提取到摄像机位置来计算图块的坐标,从而根据屏幕坐标正确渲染。我希望它不会混淆。这是代码,以防它可能对那里的人有用。对不起,代码很难看。

System.ServiceModel.Syndication.Syndicationfeed