在OpenGL中模拟屏幕尺寸并显示缩放图像

时间:2012-05-16 15:14:23

标签: android opengl-es canvas surfaceview

基于我在开始制作我正在开发的游戏时所阅读的内容,我得出的结论是,如果我在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.

这是对的吗?

1 个答案:

答案 0 :(得分:1)

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

对于2D的openGL,它的工作速度比Canvas快得多,并且具有更大的位图内存缓冲区。 Canvas适用于小型游戏,但不适用于强化游戏。