如何复制扩展CCSprite的实例
How to copy instances of an extended CCSprite?
我计划扩展CCSprite
类以创建Block
类,这是我游戏的基本构建块。可能有许多"archblock"——单个块所基于的原型。特别是,我想创建一个调色板,用户可以从中选择要放置在游戏板上的构建块。一旦放在木板上,积木就有了自己的身份。
到目前为止,我拥有的是:
class Block : public CCSprite {
private:
int _id = 0;
int _type = 0;
public:
Block* CopyBlock();
}
一旦用户选择了一个Block
并将其放在游戏板上,就会调用CopyBlock
,原型就会安全地返回到调色板中,让新铸造的Block
在游戏板中过上自己的生活。
我注意到CCObject
"实现"了Copy
方法,但据我所知,这只是指未实现的CCObject
的CopyWithZone(0)
。不过,Copy
方法不是虚拟的,所以我有点不确定是否能够覆盖它。(我在C++方面不是很强,但我对OOP有很好的理解,所以如果有人愿意分享的话,我愿意了解细节。)
问题:
1) 这个设计有意义吗?我应该重写Copy
和/或CopyWithZone
吗?
2) 如何实现CopyBlock
(或Copy
和/或CopyWithZone
),以便将CCSprite
的内容和类似_type
的成员都复制到新的Block
?
谢谢!
除非您的块精灵包含子级。你可以很容易地创建一个复制构造函数,创建相同的精灵并复制块的属性(也许还有一些需要的精灵属性):
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
不复制纹理,如果调整纹理,它将在块的所有副本上可见,但如果您不需要调整纹理,那么这应该适用于您。
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- C++中的VLA,扩展名为std=C++11
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++返回 Numpy 数组的 Python 扩展模块
- 扩展可变参数模板中的变量名称
- 扩展C++生成的代码的模板参数类型名称
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 将元组类型扩展为可变参数模板?
- 如何按文件扩展名引用文件夹中的文件
- HDF5Cpp 扩展复合数据集超板问题
- MSVC中的宏观扩展问题
- 嵌套参数包扩展失败
- C4204:使用的非标准扩展:非常量聚合初始值设定项
- [temp.variadic]中关于包扩展实例化的措辞
- 如何复制扩展CCSprite的实例