c++ - 如何复制扩展 CCSprite 的实例?

标签 c++ class cocos2d-x extend

我打算扩展 CCSprite 类以创建一个 Block 类,这是我游戏的基本构建 block 。可能有许多“archblocks”——各个 block 所基于的原型(prototype)。特别是,我想创建一个调色板,用户可以从中选择要放置在游戏板上的积木。一旦放置在板上,积木就会呈现出自己的身份。

这是我目前所拥有的:

class Block : public CCSprite {
private:
  int _id = 0;
  int _type = 0;
public:
  Block* CopyBlock();
}

一旦用户选择了一个 Block 并将其放在游戏板上,CopyBlock 将被调用并且原型(prototype)被安全地返回到调色板,留下新的minted Block 在游戏板上过着自己的生活。

我注意到 CCObject“实现”了一个 Copy 方法,但据我所知,这只是指一个 CopyWithZone(0) 用于未实现的 CCObject。不过,Copy 方法不是虚拟的,因此我不确定是否可以覆盖它。 (我不是很擅长 C++,但我对 OOP 有很好的掌握,所以如果有人愿意分享,我会提供详细信息。)

问题:

1) 这个设计有意义吗?我应该改用覆盖 Copy 和/或 CopyWithZone 吗?

2) 如何实现 CopyBlock(或 Copy 和/或 CopyWithZone),以便 CCSprite _type 之类的东西和成员被复制到新的 Block?

谢谢!

最佳答案

除非你的 block Sprite 包含 child 。您可以轻松地创建一个复制构造函数,创建相同的 Sprite 并自己复制 block 的属性(可能还有一些需要的 Sprite 属性):

class Block : public CCSprite {
private:
  int _id = 0;
  int _type = 0;
public:
  Block (Block &otherBlock);
}

执行文件:

Block::Block (Block &otherBlock) {
   this->initWithTexture(otherBlock.getTexture());
   // If your sprite contains children then this is the place to iterate all children
   // sprites, create and add them to this block. (do not forget to copy their position as well.)
   this->_id = otherBlock._id;
   this->_type = otherBlock._type;
}

请注意,由于 initWithTexture 不会复制纹理,如果您调整纹理,它将在所有 block 拷贝上可见,但如果您没有纹理调整需求,那么这应该适合您.

关于c++ - 如何复制扩展 CCSprite 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895080/

相关文章:

c++ - 期望在两个相同平台上构建两个共享库是否合理?

c++ - 将 glLoadMatrixf 与我自己的矩阵一起使用

java - 如何在 OncreateMethod 中同时使用 AppCompatActivity 和 Activity 类

c++在将变量传递给函数时声明变量

ios - 继承初始化类中的Swift错误

c++ - openssl 包含 Visual Studio 2012 无法识别的路径

c++ - 将 C/++ OpenCV 程序从视频稳定程序更改为 CUDA

c++ - OpenAl 或 Cocos2dx 存在错误

c++ - Crypto++/iOS 64 位项目中的 undefined symbol

c++ - Cocos2dx - 从缓存中清除特定纹理