如何在 cocos2d-x 中轻松清除自定义共享实例
How to easily purge custom shared instances in cocos2d-x?
我正在做一个小型的 Cocos2d-x 项目,在那里我受到 CCDirector::sharedDirector()
方法和 Cocos2d-x 中其他共享实例实现的"单例"模式的启发。例如,在CCDirector.cpp
我们有
static CCDisplayLinkDirector *s_SharedDirector = NULL;
// ...
CCDirector* CCDirector::sharedDirector(void)
{
if (!s_SharedDirector)
{
s_SharedDirector = new CCDisplayLinkDirector();
s_SharedDirector->init();
}
return s_SharedDirector;
}
void CCDirector::purgeDirector()
{
// cleanup scheduler
getScheduler()->unscheduleAll();
// ...
// delete CCDirector
release();
}
purgeDirector()
方法清除所有其他共享实例,如共享动画缓存、共享精灵帧缓存等 - 所有这些都在同一个模具中转换。我想自己做几个,比如一个共享的游戏大厅。
我宁愿不修改CCDirector,因为它肯定会发生变化。
有什么自然的地方可以放置我的清除代码吗?当调用或类似调用时,是否有可能响铃cocos2d::CCDirector::sharedDirector()->end()
?谢谢!
好吧,也许你不应该首先受到单例模式的"启发"。
是的,它们可以说很容易上手,也很诱人,但在99%的情况下(包括大多数cocos2d的单例)它们也是糟糕的设计。特别是因为你说"几个"。
单例本质上是全局变量的容器。全局变量(如单例变量)最好避免使用,除非它们与所有其他类完全分离并且服务于单一目的。NSFileManager就是一个很好的例子,或者SimpleAudioEngine单例。
更好的设计使用依赖对象和包含对象的树状结构,这与场景中节点的层次结构没有什么不同。在无单例设计中,"清除"对象变得微不足道。一旦清除了处理特定任务(即场景)的最父对象,那么所有后代对象都会随之自动清除 - 前提是代码中没有任何对象生存期(内存管理)错误。
每个类都应该负责创建和释放它包含的对象。通过"包含",我的意思是作为成员变量的实例指针,或者有时是包含实例指针的数组或字典成员变量。
本文很好地解释了对象生命周期C++重点。但这只是一个开始。
经过一个严肃的"Douh!"时刻,我意识到清除自定义单例最容易放在AppDelegate::~AppDelegate()
析构函数中,其中 cocos2d-x Xcode 模板中提供了AppDelegate
。所以我做到了。
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 我正在声明一个自定义优先级队列,包括 pair<pair<int,int>int >,如何清除它?
- 如何在 cocos2d-x 中轻松清除自定义共享实例
- 自定义向量的清除功能