在用CCARRAY_FOREACH的时候 

Ref * obj;

CCARRAY_FOREACH(obj,array){

...

} 当你在上面的宏里面执行remove的时候,在这一帧里面  头指针,和尾指针是不动的。

 所以当你用了array->remove( ... )函数,会导致移除后面的所有内容向前移动一位,那么尾指针,就为空了,在执行上面宏里面的循环的时候,会发现指针为空,会报错

 fastremove,是把尾指针的内容复制到 删除的那个位置,那么此时会同时存在两个相同的元素, 如果在执行某个操作的时候,可能会执行两次,会有不可预料的问题

 cocos2d-remove和fastremove问题详解


有一种方法就是把要删除的元素赋值,在ARRAY_FOREACH 的外面执行 remove,这样在下一帧的时候,头指针和尾指针 就会重新赋值。一般这个ARRAY_FOREACH的宏是在 scheduleupdate里面的帧循环里面 定义的。

相关文章:

  • 2021-09-27
  • 2021-07-27
  • 2022-12-23
  • 2021-04-24
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2021-10-21
猜你喜欢
  • 2021-09-30
  • 2021-09-05
  • 2022-12-23
  • 2021-05-30
  • 2021-05-29
  • 2021-11-01
  • 2021-12-05
相关资源
相似解决方案