简介
在 Pocket PC 的早期版本中,Pocket PC 的标准纵向分辨率为 240 x 320。然而,假设一个应用程序会在特定的分辨率下运行的想法并不好,这样开发人员就会在写程序时将这个特定于屏幕的知识构建于应用程序中。许多旧式的应用程序通过滚动条来自动支持方形分辨率(例如,240 x 240),但是全屏的应用程序(如游戏)不支持这样做。游戏开发人员在开发全屏游戏时,如果游戏要在不同的屏幕上正确的表现和运行,他们需要在心里保持不同的分辨率。
本文描述了在将全屏游戏从纵向显示移植到方形屏幕显示时会遇到的常见问题和可能的解决方案。每种方案都需要进行权衡,其有效性也要依赖于游戏本身。
常见问题
用户在方形屏幕上玩全屏游戏时会遇到一些常见问题:
. 被裁剪的背景和物体
. 缩放的游戏进行方式
. 输入没有被缩放
下面这个游戏是这些问题的示例。游戏的目标是通过移动屏幕下端的横条击球来清除屏幕上方的砖块。如果球击中一块砖块,砖块就会被清除。
图 1 显示了游戏在纵向屏幕上的显示效果
图1. 在纵向屏幕上的砖块游戏
被裁剪的背景和物体
如果游戏的分辨率针对纵向屏幕进行硬编码,裁剪会在游戏的底部发生。裁剪使砖块游戏不可进行,因为用户看不见屏幕底部的横条,如图2所示。
图2. 裁剪的方形屏幕
这个问题的一种解决方案是将物体对屏幕进行相对定位。对于砖块游戏,可以让砖块相对于屏幕顶部进行定位,而横条相对于屏幕底部定位。在相对屏幕坐标中定位物体可以消除游戏对屏幕分辨率的依赖性。但是,这种方法会产生另外一个问题:缩放的游戏进行方式。
缩放的游戏进行方式
在本例中,上一部分我们描述了砖块游戏对物体采用相对定位。虽然相对定位解决了裁剪问题,但是游戏在方形屏幕设备上很难进行 ― 在砖块和横条之间没有足够的空间,如图 3 所示。
图3. 在方形屏幕缩放进行游戏
相对定位可能对一些游戏很好用;但是,在砖块游戏中,它大大的改变了游戏的进行方式。图中所示的游戏难度增大了,因为和在纵向设备上相比,用户需要快得多的反应才能控制横条击中球。某种意义上说,几乎不可能控制横条在屏幕上足够快地移动以击中球。
解决这个问题的一种方法是减少每关的砖块行数(例如,从 9 行减少到 5 行)。这样,游戏在方形屏幕上和纵向屏幕上就不一样了,尽管用户体验会愉快许多。
如果放任一些细节对您的游戏不是问题,那么另外一个方案是在屏幕范围内缩放整个游戏。砖块游戏的图形很简单,所以如果您垂直的缩放这个游戏,它的外观和在纵向设备上相似。
输入没有被缩放
屏幕尺寸同样影响用户可以在屏幕上使用的空间。要确定缩放所有图形的同时,也考虑到用户的输入。如果没有对输入和图片使用同样的方法进行缩放,结果是输入的坐标没有和图片对齐或者甚至完全偏离。
例如,假设砖块游戏的图形被缩放,但是输入坐标没有被缩放。如果游戏试图处理 y280 时对横条的定位,横条会无法在方形屏幕上移动,因为垂直分辨率是 240 像素。
同时为纵向模式和方形屏幕进行设计
您可以使用其它技术使游戏在纵向屏幕和方形屏幕都可以正常进行,技术成功的关键依赖于游戏本身。
位图缩放
您可以使用许多不同的方法进行缩放来得到同样的效果。最简单的情况下,您可以缩放每种物体以适应当前的屏幕。Tic-Tac-Toe download sample 示例根据屏幕尺寸缩放所有位图。在接近 tictactoe.h 的顶部位置,您能够看到:
#define DesignedWidth
240
#define DesignedHeight 240
你可以使用这些值(即游戏设计的屏幕尺寸)来根据设备屏幕尺寸缩放原始图形。在游戏载入位图时,ScalingImage类比较设备屏幕尺寸和开发人员设计游戏时使用的尺寸。如果设计分辨率和设备的实际分辨率匹配,就不需要缩放图形。
对于高精度的位图或者图片,缩放位图可能不是很好的方案,因为拉伸后的效果看起来不太好。这种情况下,您可以对于方形和纵向屏幕分别创建图片。
屏幕相对坐标
Tic-Tac-Toe 下载示例演示了如何在 TicTacToe::DrawBoard方法中使用屏幕相对坐标来绘制游戏棋盘。每一条直线在水平和垂直方向按 1/3 递增进行绘制,这样将屏幕按照 Tic-Tac-Toe 游戏的要求将屏幕分成了九格。使用屏幕相对坐标使得棋盘可以在任何分辨率下被绘制。
相对屏幕坐标也可以用于测试输入。使用和 Tic-Tac-Toe 棋盘一样的规则,可以精确的测试在游戏棋盘每一格的点击。
边框化 (Letterboxing)
如果在您垂直拉伸游戏后,游戏没有达到您想要的效果,您可以按比例将游戏按照方形屏幕的高度进行缩放并边框化。图 4 显示了砖块游戏进行边框化处理的外观。
图4. 砖块游戏按照方形屏幕缩放并边框化
边框化的优点是在失去图形细节的时候可以表达同样的游戏进行方式。如果将游戏边框化,可以使用边界的额外空间来显示游戏信息,或者进行美化来利用空间的优点。如果游戏是边界滚动 (side-scrolling) 的游戏,可以选择如之前所述那样来缩放游戏,也可以使用边界的空间来加宽游戏玩家可以看见的区域。
平移 (Panning)
如果缩放或者边框化对您的游戏不合适,平移可能是个办法。平移方案会尽可能多的在屏幕上显示游戏,并且在游戏画面比屏幕大的时候使用某种机制移动视图。使用滚动条来阅读文档是平移的一个简单的例子。您可以在浏览器的窗口中只显示文档的一部分,但如果您想看得更多,就可以使用滚动条来显示更多的文字。您也可以使用笔针 (stylus)、设备上的按钮和许多其它机制让用户可以平移。
如果决定启用平移,就不用缩放图片,也不需要显示边框化方式增加的额外空间。但是,平移会影响游戏进行方式。如果游戏要求用户垂直滚动才能看见球在哪里,那么砖块游戏会非常困难。平移对回合制游戏很适用,因为用户在画面上四处查看需要的额外时间不影响游戏的进行。
为方形屏幕进行设计
既然您已经知道了 Windows Mobile Second Edition 或更高版本的软件支持方形屏幕,您就可以将游戏设计为默认在方形屏幕进行,当用户在纵向屏幕上进行游戏时,可以使用屏幕底部的额外空间显示对游戏不是至关紧要的信息,比如分数。图 5 显示了如何为砖块游戏使用屏幕底部的空间。
图5. 左图显示了在方形屏幕中的砖块游戏;右图显示了在纵向屏幕的砖块游戏,它使用了额外的空间显示附加的游戏信息。
您也可以将游戏画面移动到屏幕的底部,然后在屏幕顶部显示附加的游戏信息。您可以决定最适合游戏的设计方式。