向各个方向滚动游戏环境

时间:2010-11-15 00:12:08

标签: iphone collision-detection

如何为滚动游戏创建游戏“区域”?

然后如何在此滚动环境中使用碰撞检测设置各种障碍。

我想尝试一个允许用户滚动到某个方向以便在游戏中前进的项目。

如何映射环境中的对象,然后移动我认为的“相机”,即环境视图。

由于

2 个答案:

答案 0 :(得分:1)

诀窍是没有“区域”。唯一存在的是相机下面的东西(你目前看到的视图)和一个小的周边区域,让你有时间在你正在移动的方向上准备更多的世界..

您的世界坐标需要定义为视图的起始坐标。您可以使用切片创建视图 - 最简单的是9个切片,一个是当前“打开”,另一个是每个方向。如果你看一下键盘数字键盘,你就会“打开”5.如果你向右移动一点,你就会显示部分地块8,9,5和5。 6.此时,您将创建新的瓷砖,以防您进一步移动。当你离开瓷砖5时,你可能会释​​放瓷砖4,1和1。 2.九个瓷砖可能不是最佳数量。

如果使用UIViews(可能不是高性能选项)进行此操作,您可能会定义一个可以处理所有切片并将其平铺到视图上的大视图(添加和删除子视图),设置大视图的框架定义您的相机位置。当您移动时,您需要更改框架以移动相机,当您需要随机移动瓷砖时,您可以移动瓷砖和框架以进行重新定位,从而在视图坐标内进一步移动。

碰撞检测非常简单,因为您定义了自己的尺寸(在这个世界中代表“你”的东西),并且视图中的对象具有您可以检查的尺寸。 CGRectIntersectsRect可能是最简单的函数,但如果你有不规则大小的视图,它会变得更复杂。

这个关于implementing a cyclic UIScrollView的答案是一个类似的想法,但它只处理一个方向的滚动。

这是一个非常常见的主题,如果你谷歌,你会发现很多示例代码和教程。

答案 1 :(得分:0)

从游戏逻辑方面来说: 所有对象(让我们称之为游戏对象)都应该在游戏世界中有一个坐标(x和y位置)。您将把所有游戏对象都保存在列表中。你的玩家对象也将是一个游戏对象。通常,您的“相机”位置将相对于您的玩家对象位置。即播放器将始终位于屏幕的中心。要确定对象的当前“屏幕”位置,您只需从对象“世界”位置减去相机位置。通常使用简单的矩形重叠检查进行碰撞。您为所有对象提供宽度和高度属性,并使用x,y,width和height进行碰撞检查。

从显示方面: 如果你想显示许多物体(即玩家,敌人,障碍物等),实现这样的事情的最好方法是使用OpenGL视图。在此视图中,您可以将所有对象显示为映射到多边形的纹理。你可以使用已经拥有所有代码的cocos2d这样的库来轻松实现这一目的。