编辑:我选择了第二种方法,因为即使所有 3 个平铺层都填满了整个屏幕,我也能获得 150+ fps。
编辑 2:我阅读了很多关于顶点缓冲区对象以及它们如何适用于静态几何的内容,尽管我仍然不知道如何将我的 2D 切片转换为 VBO 并将其存储在 GPU 内存中,但这绝对是一种方式如果其他人正在寻找一种快速渲染静态几何体/四边形的方法。
我正在制作像 Super Meat Boy 这样的游戏,并且想知道将关卡图块存储在数组列表中并进行相机边界重叠测试以查看是否应该渲染是否会更好/更快。
foreach(Tile tile in world.tiles) {
if(Overlap(camera.bounds, tile))
render(tile);
}
或者存储每个网格正方形并且仅在相机边界之间读取的二维数组会更好吗?
int left = (int)(camera.position.x - camera.width/2);
int right = (int)(camera.position.x + camera.width/2) + 1;
int top = (int)(camera.position.y - camera.height/2); // WHY XNA DO YOU UPSIDE DOWN!!!
int bottom = (int)(camera.position.y + camera.width/2) + 1;
for(int x = left; x < right; x++) {
for(int y = top; y < bottom; y++) {
render(world.tiles[x][y]);
}
}
相机可以在屏幕上放置 64*36 块,使用后一种方法可以读取 2300 个奇数块,但是对关卡中的每个块进行重叠测试会更好吗?我读了一个关于将匹配的相邻图块连接成一个更大的四边形并只是重复纹理的答案(尽管我使用的是纹理图集,所以我不确定如何在纹理上重复一个区域)。
干杯,伙计们。