2012-07-31 34 views
1

我试图用帆布和surfaceview使一个应用程序,我现在担心的是,在未来我会用它的许多问题,因为我不知道,如果画布是成正比每个设备。目前我只能使用我的模拟器,因为我的手机的USB电缆不工作(我知道..我必须得到一个新的..)。是在不同的设备Android比例帆布

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

这真的很困扰我...

谢谢!

+0

你也可以通过邮件,蓝牙,FTP或其他方式将APK发送到设备。你会错过调试的东西,但只是为了检查你的画布是否缩放或不足够。老实说,我完全按照你的要求做了,而且不得不面对扩展问题......现在完全忘记了细节! – 2012-07-31 12:13:48

+0

@ Cdr.Powell谢谢哈哈,顺便说一下,我怎么可以上传apk到我的android没有签署每次,我宁愿通过WiFi或蓝牙(我的手机没有扎根..我有三星银河s 4g充满活力) – Baruch 2012-07-31 12:19:44

+0

那么,我只是让Eclipse建立应用程序,从APK文件夹中取出APK,将它复制到设备并安装。当然,从非市场需求安装启用,但我从来没有被麻烦手动签名。我的开发者电话是SGS +,SGS2,SGSN和SGS3(不是我的粉丝!不是我的决定!)。 – 2012-07-31 13:05:25

回答

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)width/this.gameScreenWidth; scaleYFromVirtualToreal =(float)height/this.gameScreenHeight;

  3. 定义基于以前定义位图中的Canvas对象(允许你画它如canvas.drawRect()[...]):

    Canvas canvasGameScreen = new Canvas(gameScreen);

  4. 在你的渲染线程,你必须有一个叫做帧缓冲画布,这将使得虚拟帧缓存:

    frameBuffer.drawBitmap(this.gameScreen,空,新的Rect(0,0,宽度,高度 ),NULL);

+0

我如何扩展它?你能否提供更多细节?还有,在我的应用程序中,我现在没有使用任何复杂的东西,只有通过使用canvas.draw ___(); – Baruch 2012-07-31 12:14:32

+0

不会使用数字,只有canvas.getheight()和canvas.getwidth和百分比会有帮助?即canvas.getheight()* .2 – Baruch 2012-07-31 12:48:18

+0

我已更新我的帖子,我希望它有帮助。 :) – 2012-07-31 17:37:57

1

否,在屏幕上的单元(是否使用canvasOpenGL)是像素。你可以使用Canvas.getWidth()Canvas.getHeight()如果你需要相对坐标画布的大小,但你的Canvas绘图方法也使用像素,所以我想你需要将坐标转换在OpenGL同时使用Canvas,而不是。

+0

谢谢,但我几乎完成了比赛,我不想再以整体比赛的方式将整个比赛写下来,然后经历这段旅程,我真的很想如果你能帮助我找到一种方法来扩展我的游戏,所以大多数(如果不是所有的设备)都会看到它们是相同的。我知道openGl更容易,但现在它不是一个选项。再次感谢您回答我的问题! – Baruch 2012-07-31 12:33:25

+0

必须使用Canvas.getWidth()和Canvas.getHeight()来使用相对坐标来缩放坐标。例如,您需要一个模板屏幕分辨率(假设为480x800),然后创建一个10单位的水平线,例如10x(480/Canvas.getWidth())。这将使您的线条相对于屏幕分辨率。 – 2012-07-31 12:47:53

+0

但我怎么会得到当前手机的屏幕分辨率? – Baruch 2012-07-31 12:53:47