在基于画布的游戏上创建“关卡/地图”?

时间:2013-01-18 14:45:51

标签: android

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

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层,形成一个“正方形块”但是这对用户来说远非有趣或吸引人,我希望能够一个。如果这是通过外部文件完成的,那么实现某种级别的进展?我将如何确保将项目放在屏幕上与屏幕尺寸/密度相关的正确坐标中;其次,我的主要问题是,我怎么能用块来制作某些形状,即一个面,没有为每个屏幕硬编码个别合作伙伴?

一个问题的排序只是两种说法,对不起,如果这太模糊了?

1 个答案:

答案 0 :(得分:1)

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

[编辑] 至于坐标问题,你说的是不同的设备有不同的屏幕分辨率,像素密度等等。但是,这并不一定会影响你的游戏。

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

这不仅可以使您的游戏独立于屏幕尺寸,还意味着您可以在内部使用更准确的位置,从而实现更准确的行为(碰撞检测等)。只要您的内部“世界”坐标集大于屏幕上的像素数,但不要太大以至于需要大量内存(如果您必须存储有关每个位置的数据)或处理能力(如果你在每个循环的多个位置进行连续碰撞检测)然后它会正常工作。对于Android游戏,考虑到普通Android设备的强大功能以及它们往往具有的屏幕类型,我会说你应该可以使用两千或三千点的“世界”坐标。你必须决定的唯一一件事是当比赛不匹配时该怎么做 - 例如,你的游戏有一个边长为4:3的网格,并且它正在16的手机上播放: 9屏幕。您可以切断边缘(并记住在那里添加一个屏障,以便球不会离开屏幕)或只是扭曲它以匹配(这不适用于某些事情,但可能在突破中无法察觉式游戏)。也许试试两个,看看你最喜欢哪个。