我使用这个教程http://www.kilobolt.com/day-6-the-android-game-framework-part-ii.html做了一个测试游戏,现在我想在游戏商店做一个真正的游戏发布。
我希望我的游戏支持不同的屏幕尺寸。因此,在阅读了很多内容之后,我现在知道我必须为不同的屏幕尺寸指定不同的布局。但是我不知道如何处理教程中的一些代码。
它基本上有这样的东西:
int frameBufferWidth = 800;
int frameBufferHeight = 480;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565);
然后用于创建Canvas:
this.canvas = new Canvas(frameBuffer);
我认为正确的答案是将它们传递给代码上的dp,但即便如此,我也不知道该怎么做。
我在教程网站上问了同样的问题,但还没有得到任何答复,请帮忙。
答案 0 :(得分:0)
<强>更新强>
如果您在xml中指定大小,我建议使用dp,如果您是动态地使用px,则建议使用px,但这是不好的建议。我知道你讨厌听到这个,但这完全取决于你想要做什么。
如果您正在编写状态栏,则无论屏幕大小如何,您始终都希望它具有相同的大小 - 为此,请使用px。我不知道如何使用dp。
另一方面,假设你有一个想要成为屏幕一半的图像 - 你有几个选择。如果你在代码中这样做,你可以使用 - 速度方面它是无关紧要的。如果你是用xml做的,你可以直接将它设置为80dp,或者(这就是我的工作),只需使用带权重的linearlayout。
老实说,我从不使用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