2014-01-13 154 views
0

我做了一个测试游戏,使用本教程http://www.kilobolt.com/day-6-the-android-game-framework-part-ii.html,现在我想做一个真正的游戏发布在游戏商店。Android - 支持多屏幕画布问题

我希望我的游戏支持不同的屏幕尺寸。所以在阅读很多内容之后,我现在知道我必须为不同的屏幕尺寸指定不同的布局。但我不知道该怎么做关于教程的一些代码。

它基本上有这样的事情:

int frameBufferWidth = 800; 
int frameBufferHeight = 480; 
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565); 

,然后将其用于创建画布:

this.canvas = new Canvas(frameBuffer); 
  • 如何适应是进入布局?
  • 这些尺寸是以像素为单位吗?
  • 我应该将它们传递给dp值吗?
  • 我应该在xml布局中指定宽度和高度值吗?

我认为正确的答案是将它们传递给代码上的dp,但即便如此,我也不知道该怎么做。

我在教程网站上问了同样的问题,但还没有得到任何答复,请帮助。

回答

0

UPDATE

我会使用DP如果你在XML中指定的尺寸建议,以及PX如果你动态地做这件事,但是这是不好的建议。我知道你很讨厌听到这个,但这完全取决于你想要做什么。

如果您正在编写一个状态栏,无论屏幕大小如何,您总是希望它的大小相同 - 为此,请使用px。我看不出你如何用dp做到这一点。

另一方面,假设你有一张图像,你希望只是屏幕的一半 - 你有几个选择。如果你是用代码来做的话,你可以使用任何一种 - 速度方面它是微不足道的。如果你用xml来完成它,你可以直接将它设置为80dp,或者(这是我所做的),只需使用带有权重的线性布局。

说实话,我从不使用dp,但在某些情况下我完全看到了它的便利性。我使用像素和加权布局来处理所有事情,而且我能够做到这一切。把它看作是值得的,但我觉得它更精确,可以获得更好的分辨率,更好地扩展到不同的屏幕尺寸,并且更直观。但是,如果你更喜欢使用dp,那么做。这真的是你感觉更舒服的一切。这两种方式都是完全可以接受的,无论是谁告诉你一切都比另一方好,只要停止听。


在您的活动,请尝试使用:

Point size = new Point(); 
getWindowManager().getDefaultDisplay().getSize(size); 
int frameBufferWidth = size.x; 
int frameBufferHeight = size.y; 

然而,这仅适用于API> 13。对于早期版本,请使用:

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
int frameBufferHeight = metrics.heightPixels; 
int frameBufferWidth = metrics.widthPixels; 

注意:这些函数以像素为单位获取大小。以PX和DP之间的转换,你可以这样做:

float factor = getResources().getDisplayMetrics().density; 
int realwidth = (int) Math.round(width/factor); <--to convert px to dp 
//int realwidth = (int) Math.round(width*factor); <--to convert dp to px 
+0

好了,getWindowManager()getDefaultDisplay()的getSize(大小)沾到PX或DP设备屏幕尺寸。? – Adocad

+0

getWindowManager()。getDefaultDisplay()。getSize(size)返回像素(px) – dberm22

+0

感谢您的回答,这些方法实际上是有帮助的。但我的主要问题仍然存在。我该怎么办?你认为将这些值传递给dp会更好吗? – Adocad