Вначале я должен сказать, что я изучаю Java самостоятельно и могу совершить самую глупую ошибку за всю историю ...
У меня проблема с падением FPS при рисовании растровых изображений в моей 2d игре.
Карта моей игры состоит из плиток размером 100x100 пикселей, и каждая плитка имеет некоторое изображение поверхности и может иметь что-то еще (например, дерево, камень или что-то еще).
У меня есть 2 основных метода рисования. Оба выглядят одинаково. Первый - это рисование карты, а второй - все, что на ней (деревья и т. Д.).
Вот код. Я ограничиваю то, что должно быть нарисовано в этом методе.
public static void drawMap(Canvas canvas, Player player, ArrayList<MapField> map)
{
int a = player.getShiftX()/Constants.TILE_SIZE;
int b = player.getShiftY()/Constants.TILE_SIZE;
for (int x = a-Constants.VISIBILITY_X; x<=a+Constants.VISIBILITY_X; x++)
{
if (x>=0&&x<=99)
{
for (int y = b-Constants.VISIBILITY_Y; y<=b+Constants.VISIBILITY_Y*2-1; y++)
{
if (y>=0&&y<=99)
{
map.get(x+y*100).update();
map.get(x+y*100).draw(canvas);
}
}
}
}
}
Тогда я звоню:
public void draw(Canvas canvas)
{
canvas.drawBitmap(Graphics.TILES_BITMAP[tileId], null, rect, p);
}
Когда я ограничиваю «видение» 3 квадратами в каждом направлении (рисуя около 60 плиток), FPS равен 60. Как только я избавлюсь от этого ограничения (весь экран должен быть нарисован - около 250 плиток), FPS падает до 27 -30, что делает игру неиграбельной.
Это нормальное поведение? Java ограничена?
Или, может, я здесь ошибся?
Полный код можно посмотреть здесь (если кто-нибудь захочет проверить):
gitlink
Кто-то сказал мне, что с таким количеством графики я уже должен использовать OpenGL, и предложил мне, например, изучить LibGDX. Но, как по мне, чистая Java более элегантна:)