sprite申请后,在执行addChild操作后,然后这个sprite被释放掉了,不过这个精灵还是在屏幕中进行动作,同时还占用内存,首先向文,这个时候剩下的只有texture吗?还是这个sprite整体都存在,怎样把这部分内容去掉呢?并且由于在相同层还要进行大量的新sprite创建,剩下的东西会影响程序执行速度…
我是新人,所以问题描述的不好,请大家多多见谅
为什么执行了addChild之后会被释放掉呢,addChild是最能保证精灵不被释放了
你要先把它从场景中Remove掉,这样你就在场景里面看不到它了。但是只这样的话texture是还在的,如果确保之后都不会再用到这个texture,可以把它从内存里面释放掉
请问我具体应该用那些代码,如何操作呢,还请大神多指教
void Node::addChildHelper(Node* child, int localZOrder, int tag, const std::string &name, bool setTag)
{
if (_children.empty())
{
this->childrenAlloc();
}
this->insertChild(child, localZOrder);
if (setTag)
child->setTag(tag);
else
child->setName(name);
child->setParent(this);
child->setOrderOfArrival(s_globalOrderOfArrival++);
#if CC_USE_PHYSICS
// Recursive add children with which have physics body.
Scene* scene = this->getScene();
if (scene != nullptr && scene->getPhysicsWorld() != nullptr)
{
child->updatePhysicsBodyTransform(scene);
scene->addChildToPhysicsWorld(child);
}
#endif
if( _running )
{
child->onEnter();
// prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter
if (_isTransitionFinished) {
child->onEnterTransitionDidFinish();
}
}
if (_cascadeColorEnabled)
{
updateCascadeColor();
}
if (_cascadeOpacityEnabled)
{
updateCascadeOpacity();
}
}
addChild()的实现由addChildHelper()做实际操作,你可以一步一步跟踪进去,根本没有进行内存释放,如果你调用CREATE()静态函数创建的,应该是由内存池去管理,你没法知道他什么时候被销毁····如果你是自己NEW的··原则上你应该自己DELETE它·····
这些都是很基本的东西,建议楼主先去看一些基础教程吧。代码this->removeChild();纹理的话,你还是看下这个吧http://www.cnblogs.com/sevenyuan/archive/2013/07/11/3183299.html
非常感谢啊!
多谢你辛苦的给我看代码,多谢了
应该的相互学习