【问题标题】:Use CCLayer or CCSprite class for my sprites?为我的精灵使用 CCLayer 或 CCSprite 类?
【发布时间】:2012-08-01 14:31:41
【问题描述】:

我有一些精灵,我不知道要从哪个类继承。我目前使用 CCLayer 执行此操作,因为我可以将必须​​添加到 sprite 的所有子对象保留在其类中,但是所有重叠层都检测到触摸事件,这可能不是那么聪明。所以用外行的话来说,我想要一个火焰喷射器,例如当我触摸它时我必须添加火焰。我只需在 FlameThrower.h 类中添加火焰(CCLayer 的子类。如果我要对 CCSprite 进行子类化,我将不得不在我的父类中添加火焰,这也是无效的,对吧?那么,什么是这里的方法正确吗?

【问题讨论】:

    标签: iphone objective-c ipad cocos2d-iphone sprite


    【解决方案1】:

    您可能根本不需要子类化 CCSprite 或 CCLayer。

    这是一个基本的 Cocos2d 游戏架构问题,我希望能得到更多的讨论。

    对于我创建的游戏,我使用 NSObject 或 CCNode 作为创建角色的基类。

    这些角色控制器类运行角色 AI 的逻辑,拥有角色的物理体(如果它有物理),并控制一个或多个代表角色的精灵。

    如果角色控制器不需要 CCNode 提供的属性或功能,那么我将 NSObject 子类化,这通常是基于物理的角色的情况。

    用户输入通常归 HUD 所有,但有时您希望将其直接添加到游戏世界中的特定角色。在这种情况下,您可能希望子类化 CCLayer 以添加触摸和加速度计,或者子类化 CCNode 并注册到触摸调度程序。

    通常我在一个单独的类中为角色创建精灵,然后由角色控制器创建和拥有。

    我创建的游戏通常有一到四个精灵表,我有一个 GameManager 类将它们作为 CCSpriteBatchNodes 加载到 CCSpriteFrameCache 中,然后当通过世界构建脚本引擎创建角色时,我传递对所需 CCSpriteBatchNode 的引用到该角色,以便它可以使用批处理节点向其添加角色精灵。

    然后角色向 GameManager 或父角色注册以进行更新、管理并最终销毁和清理。

    对于基于物理的角色,通常甚至不需要子类 CCNode(更不用说 CCLayer 或 CCSprite),除非您希望物理主体直接控制节点的行为,而不是控制节点或 NSObject 的精灵会拥有。

    【讨论】:

    • 谢谢。是的,我也选择了 CCNode。坦率地说,我不明白为什么 CCNode 和 CCLayer 之间什么都没有。我一直面临的问题是:节点上的触摸检测能力,其边界框由它包含的子节点定义。就我而言,这将是游戏引擎中非常重要的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多