ClippingNode setStencil方法Bug

我在制作游戏教程时使用了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;

}

之后就没有问题了可以正常运行.

小弟不是很清楚这个改动是否正确,还请大牛们看看,修正这个问题.

请教下 这个问题是怎么解决的 :2: