我在制作游戏教程时使用了ClippingNode,在每进行一步教程时我会根据按钮的形状大小等改变stencil,使用了setStencil方法.
在初始化ClippingNode以及设置第一个Stencil时没有问题,当进行到第二步setStencil时会报错:
Node still marked as running on node destruction! Was base class onExit() called in derived class onExit() implementations?
程序停在:
CCASSERT
(!
_running
,
“Node still marked as running on node destruction! Was base class onExit() called in derived class onExit() implementations?”
);
我看了一下setStencil这个方法,似乎在替换stencil时,释放旧的stencil时没有正确调用stencil的OnExit()方法,于是我改了一下源码,如下(红色的是添加部分):
void
ClippingNode
::setStencil(
Node
*stencil)
{
CC_SAFE_RETAIN
(stencil);
if
(
_stencil
)
{
if
(
_stencil
->
isRunning
())
{
_stencil
->
onExit
();
}
}
CC_SAFE_RELEASE
(
_stencil
);
_stencil
= stencil;
}
之后就没有问题了可以正常运行.
小弟不是很清楚这个改动是否正确,还请大牛们看看,修正这个问题.
