帮助逻辑设置好的游戏设计层(涉及SpaceManager物理,音乐和游戏逻辑)

时间:2011-03-25 16:21:01

标签: cocos2d-iphone chipmunk layer

我正在创建我的第一个iPhone游戏 - 我有OOP背景,特别是C ++,所以我对如何在保持功能的同时最好地逻辑设置图层提出了一些问题。

目前我想让我的游戏有三个主要层次:

  • HUDLayer(屏幕上的所有静态对象都在这里 - 游戏控制,用户评分,暂停按钮等。)
  • PlayLayer(播放器,主要游戏循环和所有游戏逻辑)
  • 级别图层(玩家与之交互的关卡图像和关卡物理对象,以及特定于此关卡的背景音乐)

注意我在这里使用了WANT这个词 - 因为在我的生活中,我经常不得不移动逻辑对象,只是为了在Cocos2d和太空管理器结构中工作。

以下是我正面临的一些问题

  • 我想让我的PlayLayer成为导演加载的场景 - 但如果我这样做,那么所有的HUDLayer对象都会被PlayLayer所覆盖,并且不会像他们应该那样留在原地,因此HUDLayer就是我的场景,我必须这样做只是为了让它工作
  • 我想在LEVEL层播放背景音乐(通过simpleAudioEngine playBackgroundMusic),因为我想要不同的音量来播放不同的音乐。到目前为止,我获得背景音乐的唯一方法是将它放在最顶层,即在这种情况下是HUDLayer
  • 由于我必须使用SpaceManagerCocos2d对象的一个​​实例来创建物理实体 - 看起来我的关卡层必须被杀死并且只是被整合到我的PlayLayer中,否则我有一个时间的噩梦试图检测玩家与关卡之间的碰撞。

我错过了一些非常明显的东西吗?是否有核心理解我不会得到的图层?越来越多我觉得我被框架所推动,在一个类中构建整个游戏,只是将图层用作场景。

有其他人有这些问题吗?我接近游戏的架构错了吗?任何帮助都会非常感激。

先谢谢你们!

1 个答案:

答案 0 :(得分:4)

嗯,每场比赛都不一样。在cocos2d论坛上有很多关于discussions的好architecture,有些人喜欢使用MVC方法,有些人喜欢使用Actor隐喻来包含物理对象等。

这是我的方法:

  1. 使用两个CCLayer个对象(GameLayer和HUDLayer)作为一个CCScene(GameScene)的子节点。这些是“视图”对象。
  2. 创建一个GameController单例,可以更改游戏状态(也存储在GameController中或单独的文件中。)您也可以将CCScene子类化并将其称为控制器。
  3. GameLayer负责渲染游戏关卡的图形和其中的所有演员;它还通过触摸事件处理游戏输入。
  4. HUDLayer放置在比GameLayer更高的z-index处,显然拥有HUD和按钮的所有CCSprite对象。
  5. 通过GameController管理HUDLayerGameLayer之间的互动。
  6. GameController执行所有状态更改和游戏操作。
  7. 这只是我的方法,因为它适用于我目前的游戏,但绝不是最终的答案。

    我建议您考虑使用Actor paradigm作为物理对象 - SpaceManager做得不错,但您不一定总是希望物理对象扩展CCSprite。