iOS 5 iPhone突破风格的应用程序设计

时间:2012-06-26 20:23:24

标签: ios design-patterns

我试图在iOS 5中制作突破风格的游戏,并且有一些关于设计的问题。 (这只是一次学习练习)

我打算有2个主控制器:

  • BlockBreakerViewController - 设置初始设置,例如加电和难度
  • GameViewController - 管理游戏状态及其子视图(Ball,paddle,blocks)

UiViews

  • PaddleView(一个)
  • BallView(一)
  • BlockView(很多)

模型

  • GamePlay - 管理整个游戏状态,包括球,划桨,积木和得分

我的问题是......

  1. 我应该将模型分解为单独的对象吗?
  2. UiViews和模型之间的关系应该是什么?
  3. 编辑:现在我已经回答了一般性问题,如何将其应用于“球”对象。

    现在我有一个实现drawRect的BallView。我想创建一个Ball模型。我需要Ball模型,BallView和BallViewController吗?这看起来有点矫枉过正。 GameViewController应该与BallViewController交谈吗?

1 个答案:

答案 0 :(得分:1)

根据我喜欢以模型 - 视图 - 控制器风格构建游戏的方式,这些是我对问题的回答:

(1)是的,我建议您以面向对象的方式构建模型,因为这是游戏中最具逻辑性的部分,也是游戏的核心。它是最容易构建的部分,同时它的结构对构建游戏的过程产生重大影响。在构建模型时应该考虑的一个好方法以及应该包含哪些部分就是这样思考:

“如果我要在两个完全不同的平台上制作相同的游戏,那么就说iPhone和Xbox,他们应该能够互相玩耍 - 两个游戏的共同点是什么代码?”

代码中完全相同的部分是模型

在这种情况下,我会说它的东西:GameBoard(或其他球的弹跳区域的合适名称),Paddle,Ball,Block等。还有像Level,ScoreKeeper,GameHandler这样的东西(保持大师班级)跟踪游戏规则),玩家(代表物理玩家的类)等等可能是合适的类。

该模型会跟踪与游戏规则有关的所有内容,例如球和球拍在游戏区域的位置,速度等。

(2)您的UI类还有另一项任务 - 将您的游戏对象传输到iPhone,以便用户可以查看,移动和听到它们。

有很多方法可以构建它。通常,您不需要为每种类型的对象提供UIView子类或CCSprite(Cocos2D)子类。毕竟,他们大多只是一件事,一个精灵。但是必须有逻辑将游戏世界中的对象位置传递给屏幕上的精灵。 (即使这里为了简单起见,建议使用1:1关系)

例如,每个游戏对象都可以引用一个精灵,或者你可以拥有一个包含所有精灵等的GameScene类。我建议尝试拆分一些结构,比如有一个类绘制游戏板和游戏对象,另一个绘制HUD,第三个绘制漂亮的背景,其中有一些运动等,但这需要你有一些层结构。

最后一件重要的事情是你有一个控制器,它有一个更新方法,由游戏引擎定期运行,并且这个更新方法首先触发模型更新然后绘制UI,以及作为用户进行交互。这是将所有东西绑定在一起的控制器。

我建议你也试试Cocos2d。它可以帮助您掌握游戏编程中的许多概念。你会发现Cocoa Touch做得更好,Cocos2d做得更好。