我有一些精灵,我不知道要从哪个类继承。我目前使用 CCLayer 执行此操作,因为我可以将必须添加到 sprite 的所有子对象保留在其类中,但是所有重叠层都检测到触摸事件,这可能不是那么聪明。所以用外行的话来说,我想要一个火焰喷射器,例如当我触摸它时我必须添加火焰。我只需在 FlameThrower.h 类中添加火焰(CCLayer 的子类。如果我要对 CCSprite 进行子类化,我将不得不在我的父类中添加火焰,这也是无效的,对吧?那么,什么是这里的正确方法?
1 回答
您可能根本不需要子类化 CCSprite 或 CCLayer。
这是一个基本的 Cocos2d 游戏架构问题,我希望能经常讨论。
对于我创建的游戏,我使用 NSObject 或 CCNode 作为创建角色的基类。
这些角色控制器类运行角色 AI 的逻辑,拥有角色的物理体(如果有物理),并控制一个或多个代表角色的精灵。
如果角色控制器不需要 CCNode 提供的属性或功能,那么我将 NSObject 子类化,这通常是基于物理的角色的情况。
用户输入通常归 HUD 所有,但有时您希望将其直接添加到游戏世界中的特定角色。在这种情况下,您可能希望将 CCLayer 子类化以添加触摸和加速度计,或者将 CCNode 子类化并注册到触摸调度程序。
通常我在一个单独的类中为角色创建精灵,然后由角色控制器创建和拥有。
我创建的游戏通常有一到四个精灵表,我有一个 GameManager 类将它们作为 CCSpriteBatchNodes 加载到 CCSpriteFrameCache 中,然后当通过世界构建脚本引擎创建角色时,我将所需 CCSpriteBatchNode 的引用传递给该角色以便它可以使用批处理节点将字符精灵添加到其中。
然后角色向 GameManager 或父角色注册以进行更新、管理并最终销毁和清理。
对于基于物理的角色,通常甚至不需要子类 CCNode(更不用说 CCLayer 或 CCSprite),除非您希望物理主体直接控制节点的行为,而不是控制节点或 NSObject 将拥有的精灵。