我有一些精灵,我不知道从哪个类中子类化。我现在使用CCLayer来做这件事,因为我可以将我必须添加到sprite中的所有孩子都放在它的类中,但是所有重叠的层都会检测到触摸事件,这可能不是那么聪明。因此,在外行术语中,我希望有一个火焰喷射器,例如,当我触摸它时,我必须添加一个火焰。我只需在FlameThrower.h类中添加火焰(它是CCLayer的子类。如果我是CCSprite的子类,我将不得不在父类中添加火焰,这也是无效的,对吗?那么,这里的正确方法是什么呢?
发布于 2012-08-03 03:18:08
您可能根本不需要对CCSprite或CCLayer进行子类化。
这是一个基本的Cocos2d游戏架构问题,我希望大家能更多地讨论它。
对于我创建的游戏,我使用NSObject或CCNode作为创建角色的基类。
这些角色控制器类为角色的AI运行逻辑,如果角色具有物理属性,则拥有角色的物理实体,并控制表示角色的一个或多个精灵。
如果角色控制器不需要CCNode提供的属性或功能,则I子类NSObject,这通常是基于物理的角色的情况。
用户输入通常由HUD拥有,但有时您可能希望将其直接添加到游戏世界中的特定角色。在这种情况下,您可能希望子类化CCLayer以添加触摸和加速度计,或者子类化CCNode并注册到触摸调度器。
通常,我在单独的类中为角色创建精灵,然后由character控制器创建和拥有。
我创建的游戏通常有一到四个精灵工作表,我有一个GameManager类将它们作为CCSpriteBatchNodes加载到CCSpriteFrameCache中,然后当通过世界建筑脚本引擎创建角色时,我将对所需CCSpriteBatchNode的引用传递给该角色,以便它可以使用批处理节点向其添加角色精灵。
然后,角色向GameManager或父母角色注册,以进行更新、管理,并最终销毁和清除。
对于基于物理的角色,通常甚至不需要子类CCNode (更不用说CCLayer或CCSprite),除非您希望物理主体直接控制节点的行为,而不是控制节点或NSObject拥有的精灵。
https://stackoverflow.com/questions/11761510
复制相似问题