`
tank2308635
  • 浏览: 188872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

"learn iPhone and iPad cocos2d Game Development" 学习(Tips 4)

 
阅读更多


tips 1:如果你不在onEnter方法里调用它的super方法的话,你的新场景可能不会对触摸或者加速计的输入有任何反应。如果你不在onExit方法里调用它的super 方法,当前场景可能不会从内存里释放。因为很容易忘记添加super方法,而且 在发生问题以后也很难与没有调用super方法联系起来,我要在这里特别强调这一点。你可以在ScenesAndLayer01项目里看到上述问题


tips 2:技巧:将枚举类型的第一个值设置为INVALID值是个好习惯,除非你想把第一个元素设为默认的。除非你指定一个不同的值,Objective-C的变量会被自动初始化为0。另外,你也可以添加一个MAX或者NUM到枚举类型的最后,就像下面的代码一样:for (int i = TargetSceneINVALID + 1; i < TargetScenesMAX; i++) { .. }在LoadingScene里面我们MAX或者NUM,但是有时候我加上它们是出于习惯,即使我不需要它们。


tips 3:设计关卡的难点是决定用什么样的方式来设计基于关卡的游戏。在cocos2d里,你可以选择每一个关卡都使用一个场景,或者在同一个场景里设置多个层作为关卡。选择哪种方式取决于关卡在你游戏中的作用。

每一个关卡都使用一个场景:最直接的方法是每一个关卡都使用一个单独的场景。你可以为每一个关卡创建一个新的场景类(Scene class),或者通过把关卡号码或其它与关卡相关的信息传递给一个通用的关卡场景类(LevelScene class)用于加载正确的关卡数据。这个方法很适合每个关卡之间没有多大关系,关卡可以清晰地分开的情况。你可能需要保存玩家的得分和当前剩余的生命数,除此之外不需要再保存其它的信息了。这种情况下的用户界面可能是静态的,或者最多只有一个暂停按钮。

同一个场景里设置多个层作为关卡:如果你有一个复杂的用户界面,并且在关卡转换时不允许重置游戏场景的话, 你就需要在同一个场景里用不同的层来加载和显示不同的关卡。这个方式很适合物品寻找类或者冒险类游戏,因为玩家需要在不同的房间之间移动。特别是你想在替换关卡内容的过程中使用动画的情况下。CCMultiplexLayer类可被用于这种方式中。它可以同时包含多个节点,但是任 意时间里只有一个节点是有效的。


tips 4:很多时候你游戏中的物体会有自己的处理逻辑,所以为每一种游戏物体生成一个独立的类就是理所当然的事了。很多开发者会选择CCSprite。继承是“是一个”的关系,那么你觉得角色是一个CCSprite吗?实际上你的游戏角色和CCNode类之间的关系是“有一个”的关系。你的游戏角色类“有一个” CCSprite用于显示它自己。假设你想让你的角色有好几种不同的视觉表现,你想让这几种视觉表现之间可以无缝切换。如果你的类继承自CCSprite,那么你将不得不使用两个精灵才可能做淡进淡出的转变效果。这是为什么要用“复合”而不是“继承”的一个原因。另一个原因是:游戏物体应该封装自己的视觉表现,如果它包含了自己的逻辑, 那么游戏物体就只需要自己改变自己的CCNode属性就可以了,这些属性包括位置,大小,旋转或者运行和停止动作。

你可能让场景层, 用户界面和角色自身都可以直接改变角色精灵的位置。正确的方法是:你应该让其他系统通知角色改变它的位置,而角色可以自己决定是否按照指示改变位 置,或者通过修改指令来改变位置,或者直接忽略指令。


tips 5:一些很酷的CCNode类:CCProgressTimer,CCParallaxNode,CCRibbon和CCMotionStreak。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics