小编ced*_*fra的帖子

Vector中的1000多个游戏对象太慢了?我的错是什么?

我目前正在开发一款游戏,需要跟踪很多物品.

我有一个游戏对象类,它包含对象的所有必要信息,并在update()上处理AI();

我决定,只有大脑的物体,每帧都需要更新.所以我分开了向量以节省时间.但是,在绘制对象时,我似乎无法找到类似的解决方案.所以我得到了

std::vector<cOBJECT*> LivingObjects;
Run Code Online (Sandbox Code Playgroud)

和

std::vector<cOBJECT*> WorldObjects;
Run Code Online (Sandbox Code Playgroud)

绘制所有对象时,我首先将所有对象放在RenderList中:

//Add World and Living Objects into one list of RenderObjects
RenderObjects = WorldObjects;
RenderObjects.insert(RenderObjects.end(), LivingObjects.begin(), LivingObjects.end());
Run Code Online (Sandbox Code Playgroud)

然后我按Y排序:

//Sort all Objects by Y (bottom) Coordiante
sort(RenderObjects.begin(), RenderObjects.end(), cmd);
Run Code Online (Sandbox Code Playgroud)

这是代码(也许这也很慢?)

//Sorts by Y-Coordinaté
bool cmd(cOBJECT* obj1, cOBJECT* obj2)
{
    return obj1->getrect().y + obj1->getrect().h < obj2->getrect().y + obj2->getrect().h;
}
Run Code Online (Sandbox Code Playgroud)

然后我画它们.绘图功能将检查它们是否在屏幕上!所以我只绘制可见对象:

//DRAW OBJECTS and 
for (std::vector<cOBJECT*>::size_type i = 0; i != RenderObjects.size(); i++)
{
    RenderObjects[i]->render(Renderer, CameraX, CameraY, SCREEN_WIDTH, SCREEN_HEIGHT);
}
Run Code Online (Sandbox Code Playgroud)

这是实际绘图功能':

int cTEXTURES::renderAnimation(int targetX, int …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop render vector object

5
推荐指数
1
解决办法
217
查看次数

标签 统计

c++ ×1

for-loop ×1

object ×1

render ×1

vector ×1