【问题标题】:Should I use OpenGL for chess with animations?我应该将 OpenGL 用于带动画的国际象棋吗?
【发布时间】:2010-03-21 13:00:15
【问题描述】:

目前,我正在为我的国际象棋游戏使用 SurfaceView 进行动画实验。我在模拟器中只得到大约 8 FPS。我画了一个棋盘和 32 个棋子并旋转所有东西(看看它有多平滑),我正在使用抗锯齿。在 Droid 上,我得到了大约 20FPS,所以它不是很流畅。不使用OpenGL,是否可以实现一个动画非常稀少且简单的游戏?

这是我每一帧都做的:

// scale and rotate
matrix.setScale(scale, scale);
rotation += 3;
matrix.postRotate(rotation, 152, 152);

canvas = surfaceHolder.lockCanvas();
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG));
canvas.setMatrix(matrix);

canvas.drawARGB(255, 255, 255, 255); // fill the canvas with white
for (int i = 0; i < sprites.size(); i++) {
    sprites.get(i).draw(canvas); // draws chessboard and chess pieces
}

【问题讨论】:

  • 如果你打算使用动画,我认为你应该使用 openGL。没有抗锯齿,你的游戏能快多少?这可能是一个巨大的资源消耗。您也可以在 NDK 中进行 openGL 绘图。并且不要将模拟器的速度作为真实设备的标志。

标签: java android opengl-es chess surfaceview


【解决方案1】:

我决定在创建 SurfaceView 时预缩放所有位图。现在我根本不需要使用转换矩阵。我在模拟器和实际设备(Droid)上获得了超过 30 FPS 的速度,它完全流畅。我还删除了canvas.drawARGB(255, 255, 255, 255);,这将 FPS 提高了大约 5。

【讨论】:

    【解决方案2】:

    我们能看到更多代码吗?你的棋子图标是多大的?您可能会考虑降低它们的质量以减少绘制时间。您还可以限制要加载的图标数量(为每种颜色加载每种类型的图标),然后让矩阵存储要为每个方块加载的图标类型。

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多