我试图让使用帆布和surfaceview的应用程序,我现在担心的是,在未来我会用它的许多问题,因为我不知道,如果画布是与每一个设备的比例。 目前我只能用我的仿真器,因为我的手机的USB电缆不起作用(我知道..我必须得到一个新的..)。
不管怎么说,我想知道,如果在画布上会转移我的坐标,并让一切成比例的,我的意思是,如果我有一个很好的东西,可以说(10,10)一种设备,它的屏幕上100×100(这只是为了容易计算的例子),那将是点(1,1)一个10×10的设备上。
这是真正困扰我...
谢谢!
不,这不会是这种情况。 如果你有一个坐标(10,10),这将是对所有设备相同。 我建议你scale
你的图纸。
要scale
您的图纸,你只需定义位图(将保持不变),你想提请(当屏幕尺寸改变,这将拉伸位图)。
定义一个恒定的位图:
位图gameScreen = Bitmap.createBitmap(getGameScreenWidth(),getGameScreenHeight(),Config.RGB_565);
获取规模为x和y
宽度= game.getWindowManager()getDefaultDisplay()的getWidth()。; 高度= game.getWindowManager()getDefaultDisplay()的getHeight()。; scaleXFromVirtualToReal =(浮点)的宽度/ this.gameScreenWidth; scaleYFromVirtualToreal =(浮点)的高度/ this.gameScreenHeight;
定义基于以前定义位图中的Canvas对象(允许你画它如canvas.drawRect()[...]。):
Canvas canvasGameScreen = new Canvas(gameScreen);
在您的渲染线程,你必须有一个叫做帧缓冲画布,这将使得虚拟帧缓冲:
frameBuffer.drawBitmap(this.gameScreen,空,新的Rect(0,0,宽度,高度),NULL);
没有,屏幕上的单位(不管你是用canvas
或OpenGL
)是一个像素。 你可以使用你的画布的大小Canvas.getWidth()
和Canvas.getHeight()
如果你需要的相对坐标,但你的Canvas绘图方法也使用像素,所以我想你需要将坐标转换中OpenGL
,而不是同时采用Canvas
。