处理基于像素的Android游戏的不同分辨率

我正在为Android平台开发一个2D平台游戏,所以我并不关心屏幕DPI,而是更多关于实际分辨率的像素。 从我在网上收集的内容来看,有几种不同的分辨率(和宽高比)。 根据我的搜索,目前普遍存在的两种分辨率是480×320(1.5)和800×480(1.666),是吗? 我想将这两个决议作为目标,以吸引大多数客户。 现在,我可以通过为更大的显示器显示40像素的黑色边框来处理不同的宽高比,实际上将其减少到720×480像素和1.5的比率。

我的游戏的问题在于游戏玩家必须在每个屏幕上看到相同数量的世界。 否则,一些球员将获得不公平的优势。 此外,我会根据可见性触发一些事件。 例如,只有当玩家开始看到它时才允许敌人开始射击。 否则,敌人的子弹似乎无处可去。

所以我想我需要为一个分辨率创建我的图形并为另一个分辨率缩放它们。 或者我为每个分辨率创建单独的图形。 是对的吗? 不幸的是,这两种方式对于像素图形来说都是次优的。

另一方面:我如何才能将游戏限制在这些分辨率上(特别是对于Android Market)? 我知道清单中的“supports-screens”标签,但这取决于有效的屏幕尺寸,而不是像素的大小,还是我错了? 我也对其他Android游戏开发者在解决分辨率独立性方面的个人经历感兴趣。

谢谢!

我的问题是:你觉得在PC上做什么? 对于游戏开发,Android应该更像是PC目标,而不是控制台。 你本质上需要接受的是,屏幕上会有一些你无法完全预测的屏幕。

所以我认为有两种主要方法:

(1)使用恒定的“显示大小”,就像在PC上设置固定的video分辨率并让用户的监视器处理它一样。 在这些设备上当然没有监视器,只有一个固定显示器,因此修改核心分辨率没有意义。 相反,您可以将SurfaceView设置为显示您的游戏具有固定的分辨率,并让平台的合成器在其合成到屏幕时进行缩放(在硬件中)。

(2)更智能地调整您自己运行的屏幕的实际分辨率。自己放大或缩小图形以创建所需的播放区域。 也许有一些不同大小的纹理,并为屏幕分辨率选择合适的纹理。

您可能还可以组合这些,您可以根据游戏可以运行的总分辨率选择几个固定大小的表面视图。 在任何一种情况下,您都可以根据需要进行letter-boxing,以使您的宽高比在不同的屏幕上保持不变,如果这是您想要的。

长宽比有三种不同的方法:

  1. 在某些比率上显示不透明的边框(“letterboxing”)。
  2. 以某些比率显示更多游戏世界。
  3. 在一些比例上根本不工作。

使用方法(1),您会在某些设备上浪费屏幕空间。 对于电视而言,这并不是什么大问题,但在屏幕空间有限的手持设备上却很悲惨。 使用方法(2)某些设备上的玩家可以获得优势(他们可以看到更多的世界)和缺点(精灵更小,因此触摸精度更难)。 方法(3)很糟糕。

显然这取决于你的游戏细节哪个更好,但作为一个玩家我更喜欢方法(2)。 关心其他设备上的玩家是否会获得一些假设优势的选区与选择他们的屏幕是否被不必要的黑条部分遮挡的选区相比相当小。

(类似的方法和评论适用于分辨率的差异。)