对CCSprite进行子类化的优点

Phi*_*ord 1 subclass objective-c cocos2d-iphone ios

我想了解更多关于CCSprite的子类化以及仅在init上创建CCSprite的优势.

iOS dev和Cocos2d的新功能.

我的游戏在init上创建了几个CCSprites,并在触摸/拖动/碰撞时克隆了其中的一些

寻找子类化的植入

更新:

此外,我的精灵还有一个文本标签以及一个音频文件和一个与每个精灵略有不同的图像文件.示例所有精灵都具有相同的图像,但文本和音频是不同的.碰撞时,图像文件可能会发生变化

Lea*_*s2D 6

何时应该继承CCSprite:

  • 几乎从不
  • 只有当你必须改变精灵显示自己的方式时(自定义绘制)

精灵在可可术语中是"观点".所有其他节点也是如此.问题是,Sprite是一个在屏幕上呈现纹理的对象.如果你想改变Sprite的绘制方式,子类化是有意义的,可能是通过将两个纹理混合成一个,但通过运行不同的着色器代码,通过添加自定义OpenGL绘图来添加遮罩功能.

如果不清楚,请再次询问相同的问题,但是关于不同的视图类:

"What's the advantage of subclassing UIButton? When does it make sense?"
Run Code Online (Sandbox Code Playgroud)

答案:仅当您需要更改按钮显示方式时.

您不要将UIButton子类化为使其在屏幕上移动或使其在文本字段上执行操作.这是视图控制器的工作.视图控制器允许您逐字使用视图,不使用子类.你想要的是一个视图控制器,而不是CCSprite的子类.已经经常这样做了.

长话短说:

仅当您无法通过其公共接口执行预期任务时,才会对CCSprite(等)进行子类化.

更改位置,旋转,缩放,纹理,子画面框架等都是可以从外部类(控制器)更改的属性.对于精灵来说也是如此,无论是使用CCAnimation还是运行动作.

如果您使用类似于MVC设计中的惯常控制器对象,则几乎不需要子类化CCSprite或任何其他节点类.而且,使用userObject属性可以将控制器对象与节点一起存储,因此在取消分配节点时会将其释放.

当然这两种方法都有效,最后它只能归结为是否想要使用最佳实践或不良实践.