1 | roleDownAnim->setCompleteListener([&](spTrackEntry* entry){ |
这段代码,是给一段动画设置一个播放完的回调,回调函数我采用了 C++ lambda 表达式的形式。
中括号里的 & 表示我采用引用传参的方式捕获外部参数。在动画播放完成时,删除这个动作。
这里的问题是,lambda里的 roleDownAnim 是对外部的那个 roleDownAnim 的一个引用,也就是对一个指针的引用。这个时候内部的 roleDownAnim 的值相当于对外部的roleDownAnim进行取地址操作得来的: &roleDownAnim(外部的那个)。
但是我一直误以为两个 roleDownAnim 是一样的,导致了后面的 BAD_ACCESS 崩溃错误。
这里面要改的话,只要把 lambda 的中括号里的 & 改为 =,也就是把引用传参的方式改为值传参就好了。