0

根据我在开始开发我目前正在开发的游戏时所读到的内容,我得出的结论是,只有当我在 3D 中做东西时,android 上的 openGL 才是好的。我还得出结论,surfaceView 上的画布是构建 2D 游戏的最佳方式。

在这种想法下,我编写了一个自定义图像类,理论上它会根据我的开发手机屏幕与目标手机的比例来缩放每个加载的图像。这个 scaleX 和 scaleY 的想法在整个游戏中是一致的。每个点、图像、速度等都乘以比例因子。

当我将游戏部署到另一台设备时,它每次都会强制关闭。在庞大的代码网络中的某个地方,我的自定义自动缩放系统出错了。在最近的阅读中,我决定调整一切并使用 OpenGL。这就是我的问题所在。

有没有办法让游戏认为它是以原始分辨率播放的,IE 可以轻松地将所有输入坐标转换为它们在我手机屏幕上表示的坐标。 本质上,我想模拟一个 540 x 960 的屏幕,拍一张照片,然后在用户的屏幕上显示相应缩放的照片。

我将如何制作一个以绝对坐标绘制所有内容的画布,然后在 540 x 960 区域中拍摄该画布的照片,以便我可以将第一个画布的图片绘制到显示给用户的画布上?

编辑:

我最终希望: 1. 创建一个图像/画布/事物,它是我的游戏的原始分辨率。2. 将所有内容绘制到所述图像,以原始分辨率创建当前游戏状态。3. 拍摄该图像并将其缩放到设备屏幕尺寸 4. 向用户显示游戏板。

对于触摸输入,我只需抓住用户正在触摸的坐标,并将其乘以比例因子(本机宽度与当前宽度的比率,y 与高度的比率相同)

这使我可以进行简单的更改以保持游戏正常运行,而无需重新编码整个事物。如果这会让我的性能下降,我可能需要使用 OpenGL,否则我会坚持使用那个系统。

我的计划是做这样的事情:

Canvas canvas = new Canvas(bitmap);

其中位图是本机屏幕大小的图像,然后使用我现有的所有代码。

EDI2:

要使用矩阵进行缩放,我会做这样的事情:

Canvas canvas; 
Matrix matrix = new Matrix();
matrix.postScale(screenWidth/stockWidth, screenHeight/stockHeight);
canvas.setMatrix(matrix);

....

Game Loop Logic with no image scaling, just drawing and updating of canvas based on   
stock size.

那是对的吗?

4

1 回答 1

1

您可以在 Canvas 上使用 setMatrix 方法,计算一次所需的缩放比例,并在您的代码中使用固定坐标系。

至于用于 2D 的 openGL,它的运行速度比 Canvas 快得多,并且为位图提供了更大的内存缓冲区。Canvas 适用于小型游戏,但不适用于密集型游戏。

于 2012-05-16T15:44:05.583 回答