基于Y坐标的二维渲染

时间:2015-08-08 08:03:27

标签: c++ 2d rendering sdl

我正在尝试建立一个RPG世界制造者。我有单独的图像类。像这样。

Object1::Object1(int x, int y, CSDL_Setup *sdl_set, int *p_CamX, int *p_CamY)
{
    X_pos = x;
    Y_pos = y;

    MouseX = 0;
    MouseY = 0;

    CamX = p_CamX;
    CamY = p_CamY;

    Object = new CSprite(sdl_set->GetRenderer(),"data/Trees/Tree3.png", X_pos, Y_pos, 100, 200, CamX, CamY);

}

我创建了一个Object1类对象的向量,并在创建新图像时将其推回。我把它们画在这里。

void DrawObjects()
{
    for(std::vector<Object1*>::iterator i = Object.begin(); i != Object.end(); ++i)
    {
        (*i)->Draw();
    }
}

现在渲染是通过创建对象的顺序完成的。我想根据每个对象的y值进行渲染。我做了很多研究,但无法找到任何示例代码。我还有其他类的其他图像。所以我自己尝试了一些东西来排序y值并检测哪个y值对应于哪个对象。但是我被困在这里。

int a;
void DoChanges()
{
    if(ChangeMade)
    {
        a = 0;

        for(std::vector<Object1*>::iterator i = Object1.begin(); i != Object1.end(); ++i)
        {
            ObjectArray[a] = (*i)->GetY();
            a++;
        }
        for(std::vector<Object2*>::iterator i = Object2.begin(); i != Object2.end(); ++i)
        {
            ObjectArray[a] = (*i)->GetY();
            a++;
        }
        ...

        SIZE = Object1.size() + Object2.size() + Object3.size() + ...;

        sort(ObjectArray, ObjectArray + SIZE);

        for(size_t i = 0; i < SIZE; i++)
        {
            for(size_t j = 0; j < SIZE; j++)
            {
                if(tree1[j]->GetY() == ObjectArray[i])
                {
                }
                else if(tree2[j]->GetY() == ObjectArray[i])
                {
                }
                ...
            }
        }

        ChangeMade = false;
    }

有没有办法创建一个指针数组,通过y值将对象的地址存储到不同的类,并使用这个数组进行渲染?或者您对如何处理创建对象和渲染或任何有用的链接有任何建议吗?

0 个答案:

没有答案