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