1

我正在创建我的第一个 iPhone 游戏——我有 OOP 的背景,尤其是 C++,所以我有一些关于如何在保持功能的同时最好地逻辑设置层的问题。

目前我希望我的游戏具有三个主要层:

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

请注意,我在这里使用了 WANT 这个词——因为在我的一生中,我必须不断地移动逻辑对象,只是为了在 Cocos2d 和 spacemanagers 结构中工作。

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

  • 我希望我的 PlayLayer 成为导演加载的场景 - 但如果我这样做了,那么所有 HUDLayer 对象都会被 PlayLayer 覆盖,并且不会像应有的那样保持原位,因此 HUDLayer 是我的场景,我不得不这样做只是为了让它工作
  • 我想在 LEVEL 层播放背景音乐(通过 simpleAudioEngine playBackgroundMusic),因为我希望不同的关卡有不同的音乐。到目前为止,我让背景音乐起作用的唯一方法是将它放在最顶层,即在这种情况下是 HUDLayer
  • 因为我必须使用 SpaceManagerCocos2d 对象的实例来创建物理实体 - 似乎我的关卡层必须被杀死并被合并到我的 PlayLayer 中,否则我会做噩梦来检测两者之间的碰撞球员和水平。

我在这里遗漏了一些非常明显的东西吗?对我没有得到的层有核心理解吗?我越来越觉得我被框架推动在一个类中构建整个游戏,并且只是将层用作场景。

还有其他人有这些问题吗?我接近游戏的架构错了吗?任何帮助将不胜感激。

提前谢谢各位!

4

1 回答 1

4

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

这是我的方法:

  1. 使用两个CCLayer对象(GameLayer 和 HUDLayer)作为一个CCScene(GameScene)的子节点。这些是“视图”对象。
  2. 创建一个GameController可以更改游戏状态的单例(也存储在 GameController 或单独的文件中)。您还可以继承 CCScene 并将其称为您的控制器。
  3. GameLayer负责渲染游戏关卡和其中所有actors的图形;它还处理通过触摸事件获取游戏输入。
  4. HUDLayer放置在比 GameLayer 更高的 z-index 位置,并且显然具有 HUD 和按钮的所有 CCSprite 对象。
  5. HUDLayerthe和 the之间的交互GameLayer是通过 GameController 管理的。
  6. GameController做所有的状态改变和游戏动作。

这只是我的方法,因为它适用于我当前的游戏,它绝不是确定的答案。

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

于 2011-04-18T22:44:19.997 回答