我正在尝试使用画布和表面视图制作应用程序,我担心将来我会遇到很多问题,因为我不确定画布是否与每个设备成比例。目前我只能使用我的模拟器,因为我的手机的 USB 电缆不工作(我知道.. 我必须得到一个新的..)。
无论如何,我想知道画布是否会转移我的坐标并使一切成比例,我的意思是,如果我在 a 点有东西,让我们在设备上说 (10, 10) 它的屏幕是100 X 100(这只是一个便于计算的示例)它将位于 10 X 10 设备上的点 (1, 1) 上。
这真的让我很困扰...
谢谢!
我正在尝试使用画布和表面视图制作应用程序,我担心将来我会遇到很多问题,因为我不确定画布是否与每个设备成比例。目前我只能使用我的模拟器,因为我的手机的 USB 电缆不工作(我知道.. 我必须得到一个新的..)。
无论如何,我想知道画布是否会转移我的坐标并使一切成比例,我的意思是,如果我在 a 点有东西,让我们在设备上说 (10, 10) 它的屏幕是100 X 100(这只是一个便于计算的示例)它将位于 10 X 10 设备上的点 (1, 1) 上。
这真的让我很困扰...
谢谢!
不,不会是这样。如果您有一个坐标 (10,10),那么它在所有设备上都是相同的。我会建议你scale
的图纸。
对于scale
您的绘图,您只需定义一个您想要绘制的位图(将保持不变)(当屏幕尺寸发生变化时,该位图将被拉伸)。
定义一个常量位图:
位图 gameScreen = Bitmap.createBitmap(getGameScreenWidth(), getGameScreenHeight(), Config.RGB_565);
获取 x 和 y 的比例
宽度 = game.getWindowManager().getDefaultDisplay().getWidth(); height = game.getWindowManager().getDefaultDisplay().getHeight(); scaleXFromVirtualToReal = (float) 宽度/this.gameScreenWidth; scaleYFromVirtualToreal = (float) 高度/this.gameScreenHeight;
根据您之前定义的位图定义一个画布对象(允许您对其进行绘制,例如 canvas.drawRect() [...]):
Canvas canvasGameScreen = new Canvas(gameScreen);
在您的渲染线程中,您必须有一个名为 frameBuffer 的 Canvas,它将渲染虚拟帧缓冲区:
frameBuffer.drawBitmap(this.gameScreen, null, new Rect(0, 0, width, height), null);
不,屏幕上的单位(无论您使用canvas
还是OpenGL
)是一个像素。Canvas.getWidth()
如果您需要相对坐标,您可以使用和获取画布的大小Canvas.getHeight()
,但是您的画布绘图方法也在像素中,所以我想您OpenGL
只需要在使用Canvas
.