1

我正在尝试使用画布和表面视图制作应用程序,我担心将来我会遇到很多问题,因为我不确定画布是否与每个设备成比例。目前我只能使用我的模拟器,因为我的手机的 USB 电缆不工作(我知道.. 我必须得到一个新的..)。

无论如何,我想知道画布是否会转移我的坐标并使一切成比例,我的意思是,如果我在 a 点有东西,让我们在设备上说 (10, 10) 它的屏幕是100 X 100(这只是一个便于计算的示例)它将位于 10 X 10 设备上的点 (1, 1) 上。

这真的让我很困扰...

谢谢!

4

2 回答 2

3

不,不会是这样。如果您有一个坐标 (10,10),那么它在所有设备上都是相同的。我会建议你scale的图纸。

对于scale您的绘图,您只需定义一个您想要绘制的位图(将保持不变)(当屏幕尺寸发生变化时,该位图将被拉伸)。

  1. 定义一个常量位图:

    位图 gameScreen = Bitmap.createBitmap(getGameScreenWidth(), getGameScreenHeight(), Config.RGB_565);

  2. 获取 x 和 y 的比例

    宽度 = game.getWindowManager().getDefaultDisplay().getWidth(); height = game.getWindowManager().getDefaultDisplay().getHeight(); scaleXFromVirtualToReal = (float) 宽度/this.gameScreenWidth; scaleYFromVirtualToreal = (float) 高度/this.gameScreenHeight;

  3. 根据您之前定义的位图定义一个画布对象(允许您对其进行绘制,例如 canvas.drawRect() [...]):

    Canvas canvasGameScreen = new Canvas(gameScreen);

  4. 在您的渲染线程中,您必须有一个名为 frameBuffer 的 Canvas,它将渲染虚拟帧缓冲区:

    frameBuffer.drawBitmap(this.gameScreen, null, new Rect(0, 0, width, height), null);

于 2012-07-31T12:11:58.090 回答
1

不,屏幕上的单位(无论您使用canvas还是OpenGL)是一个像素。Canvas.getWidth()如果您需要相对坐标,您可以使用和获取画布的大小Canvas.getHeight(),但是您的画布绘图方法也在像素中,所以我想您OpenGL只需要在使用Canvas.

于 2012-07-31T12:26:18.643 回答