一开始我不得不说我正在自学java,可能会犯一个有史以来最愚蠢的错误......
在我的 2d 游戏中绘制位图时,我遇到了 FPS 下降的问题。
我的游戏地图由 100x100 像素的瓷砖组成,每个瓷砖都有一些表面图形,可能还有其他东西(如树、岩石或其他东西)。
我有两种主要的绘图方法。两者看起来很相似。首先是绘制地图,其次是地图上的所有内容(树木等)。
这是一个代码。我正在限制在此方法中要绘制的内容。
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有那么有限吗?
或者只是也许我在这里犯了一个错误?
完整代码可在此处查看(如果有人愿意检查):
有人告诉我,有了这么多图形,我应该已经使用了一些 OpenGL,并建议我学习 LibGDX。但对我来说,纯java更优雅:)