Из-за проблем с производительностью мне приходится разрезать карты на куски.
Я управляю картами следующим образом:
listMap[x][y] = new Tile (x,y);
Я тщетно пытался сократить этот список на несколько «кусков», чтобы избежать загрузки всей карты, потому что fps не очень высоки при большой карте. И все же, когда я обновляю или рисую, я делаю это с небольшим диапазоном плиток. Вот как я поступаю:
foreach (List<Tile> list in listMap)
{
foreach (Tile leTile in list)
{
if ((leTile.Position.X < screenWidth + hero.Pos.X) &&
(leTile.Position.X > hero.Pos.X - tileSize) &&
(leTile.Position.Y < screenHeight + hero.Pos.Y) &&
(leTile.Position.Y > hero.Pos.Y - tileSize)
)
{
leTile.Draw(spriteBatch, gameTime);
}
}
}
(и то же самое для метода обновления).
Поэтому я стараюсь учиться с такими играми, как minecraft или terraria, и любые две карты управляют картами, намного большими, чем у меня, без малейшего падения fps. И, видимо, они загружают «куски».
То, что я хотел бы понять, это как сократить мой список в Чанке и как отображать в зависимости от положения моего персонажа. Я пытаюсь много вещей без успеха.
Заранее спасибо, что поставили меня на правильный путь!
Ps: Опять извините за мой английский: '(
Pps: я не опытный разработчик;)
редактировать:
Благодаря IVlad я получаю 10 кадров в секунду, меняя только лупы следующим образом:
for (int x = (int)(hero.Pos.X) / tileSize; x < (hero.Pos.X / tileSize) + (int)(screenWidth/tileSize); x++)
{
for (int y = (int)(hero.Pos.Y) / tileSize; y < (hero.Pos.Y / tileSize) + (int)(screenHeight / tileSize); y++)
{
if (x >= 0 && y >= 0 && x <= tileXMax && y <= tileYMax ) {
grille[x][y].Draw(spriteBatch, gameTime);
}
}
}
Несмотря на это, fps все еще низкие и зависят от размера карты, а не от количества видимых тайлов.