У меня вопрос о 2D TileMap Optimization.C++ 2D TileMap Оптимизация рендеринга
я вынес Tilemap, но скорость слишком медленно (== фреймрейт 50)
Я думаю, что я могу указать плитки быть оказаны. Поэтому вместо того, чтобы отображать все плитки, просто отрисуйте плитки на экране (устройстве).
Это мой текущий метод.
\t //Lower Layer
\t \t for(int y = 0; y < Height; ++y)
\t \t {
\t \t \t for(int x = 0; x < Width; ++x)
\t \t \t {
\t \t \t \t //if the tile index number is -1, then this is null tile (non drawing)
\t \t \t \t if(Layer1[y][x] != -1)
\t \t \t \t {
\t \t \t \t \t // this EPN_CheckCollision() Function is the AABB Collision Function.
\t \t \t \t \t // if there 2 Rect value's are collide , then return true.
\t \t \t \t \t if(EPN_CheckCollision(EPN_Rect(EPN_Pos(x*32, y*32)-CharacterPos) , EPN_Rect(0-32,0-32,1024+32,768+32)))
\t \t \t \t \t {
\t \t \t \t \t //EPN_Pos structure is consist of (float PosX , float PosY)
\t \t \t \t \t EPN_Pos TilePos = EPN_Pos(x * 32, y * 32)-CharacterPos;
\t \t \t \t \t //EPN_Rect structure is consist of below members
\t \t \t \t \t //float Top X
\t \t \t \t \t //float Top Y
\t \t \t \t \t //float BottomX (not Width)
\t \t \t \t \t //float BottomY (not Height)
\t \t \t \t \t EPN_Rect TileRect = EPN_Rect(Layer1[y][x] % 8 * 32, Layer1[y][x]/8 * 32, Layer1[y][x] % 8 * 32 + 32, Layer1[y][x]/8 * 32+32);
\t \t \t \t \t //Blt is Texture render function.
// 2nd Parameter is Render Pos and 3rd parameter is Render Texture's Rect.
\t \t \t \t \t pEPN_TI->Blt("MapTileset", TilePos, TileRect);
\t \t \t \t \t }
\t \t \t \t }
\t \t \t }
Это мой TileMapRender метод.
(я использую EPN двигатель сделанный Directx, которое неизвестно. Поэтому я аннотированный мой код)
я вынес tilemap, столкнувшегося с DeviceScreen (1024 * 768, но для края) , потому что я хочу сделать видимый tilemap на экране (я не выношу плитки из экрана устройства). Итак, я проверяю AABB Collision на каждую плиту и (1024, 768) экран устройства, теперь я только обрабатываю необходимые плитки. Но я думаю, что этот метод имеет проблему, что он не выводит из экранных плит. Для справки также повторяйте все maptiles; Какой неэффективный метод ... Возможно, в этом методе может быть проблема с частотой кадров в моей игре. Могу ли я попросить STACK OVERFLOW, как я могу это сделать?
Есть ли еще один способ оптимизировать рендеринг tilemap? Дайте мне несколько советов.
P.S
Я сожалею о моем узловатом вопросе.
Прошу прощения за мой английский.
спасибо! Я прочитал ваши советы, и я понял это.но у меня больше вопросов про свиток. Теперь я могу знать индекс X, Y tile. но я до сих пор не могу понять о каждом RenderPos X, Y. Как я могу получить каждый элемент P X X X, когда я прокручиваю плавно? – HelloWorld
Используйте 500% 16, это означает, что модуль остается, поэтому вам нужны плитки +2 буфера – paulm
спасибо много! Есть ли какая-либо рекомендуемая система в stackoverflow? Я хочу порекомендовать ваш ответ наилучшим образом. – HelloWorld