0

我目前正在开发一款突围风格的游戏,但是到目前为止,我只使用以下方法对一个级别进行了硬编码:

for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 7; j++) {
                int y_coordinate = (i * (blockHeight + spacing)) + topOffset;
                int x_coordinate = j * (blockWidth + spacing);

所以基本上它在屏幕的宽度上放置 7 个块,然后向下放置 6 层,形成一个“方块方块”,但这对用户来说远非有趣或吸引人,我希望能够做到这一点。实现某种级别的进展,这应该通过外部文件来完成吗?以及我将如何确保将项目放置在与屏幕尺寸/密度相关的正确坐标的屏幕上,其次,我的主要问题是,我如何才能用块制作某些形状,即脸,没有为每个屏幕硬编码个人坐标??

一个问题只是两种说法,如果这太模糊了,抱歉?

4

1 回答 1

1

如果您只是希望级别不同,那么您可以随机生成它们。对于每个区块位置,有一个随机机会在那里会有一个区块。永远不要两次(或多或少)相同的级别。如果你想要特定模式的方块,比如一张脸,那么你必须想出一些方法将关卡的方块布局存储在一个文件中,然后当关卡开始时,游戏会加载文件以供当前级别,读取块位置并以正确的排列创建它们。否则没有真正的方法可以做到这一点,除非您想提出数学公式来描述您的关卡形状并使用它们以程序方式生成它们。

[编辑] 至于坐标问题,你说的对,不同的设备有不同的屏幕分辨率、像素密度等。然而,这并不一定会对你的游戏产生太大影响。

解决此问题的一种常见方法是有两个坐标集:“世界”坐标,表示对象在游戏世界中的位置,以及“屏幕”坐标,表示对象所在的位置。被绘制。你所有的物理和游戏逻辑代码都应该使用世界坐标,它可以是你喜欢的任何比例(我建议选择一个大于你的游戏将显示的最大屏幕的像素尺寸的尺寸)。我之前提到的关卡文件当然也应该在世界坐标中。您对屏幕坐标感兴趣的唯一时间是您在屏幕上绘制某些东西时。此时,您有一个小函数可以将一个坐标集映射到另一个坐标集。通常它只是一个简单的比例因子。所以,当你的游戏启动时,它询问手机或平板电脑的屏幕分辨率,计算此特定实例的比例因子,并将其存储,然后您只需在绘制内容时查找它,并使用它进行转换。例如,如果您的游戏使用跨度为 10,000 点的坐标集,并且您的游戏在跨度为 768 像素的屏幕上运行,则游戏将计算比例因子为 10,000 / 768 = 13.021ish。然后每当你画球时,你就知道它的屏幕 x 坐标是它的实际 x 坐标除以 13.021ish。并且您的游戏在 768 像素的屏幕上运行,游戏将计算比例因子为 10,000 / 768 = 13.021ish。然后每当你画球时,你就知道它的屏幕 x 坐标是它的实际 x 坐标除以 13.021ish。并且您的游戏在 768 像素的屏幕上运行,游戏将计算比例因子为 10,000 / 768 = 13.021ish。然后每当你画球时,你就知道它的屏幕 x 坐标是它的实际 x 坐标除以 13.021ish。

这不仅使您的游戏不受屏幕大小的影响,还意味着您可以在内部使用更准确的位置,从而实现更准确的行为(碰撞检测等)。只要您的内部“世界”坐标集大于屏幕上的像素数,但又不会大到需要大量内存(如果您必须存储有关每个位置的数据)或处理能力(如果您正在对每个循环的许多位置进行连续碰撞检测)然后它会正常工作。对于 Android 游戏,考虑到普通 Android 设备的功能和它们倾向于拥有的屏幕类型,我会说你应该没问题的“世界”坐标集跨越两三千点。那么你唯一需要决定的就是当道具没有时该怎么办' t 匹配 - 例如,您的游戏有一个边长比例为 4:3 的网格,并且在屏幕为 16:9 的手机上播放。您可以切掉边缘(并记住在此处添加障碍物,以使球不会离开屏幕)或只是将其扭曲以匹配(这不适用于某些东西,但在 Breakout 中可能不明显式游戏)。也许两者都试一下,看看你最喜欢哪个。

于 2013-01-18T14:51:58.240 回答