Fork me on GitHub

切记 cocos2d中一个CCAction 对象只能被使用到一个Sprite对象上

原文:http://blog.csdn.net/tangaowen/article/details/7342021

切记 cocos2d中一个CCAction 对象只能被使用到一个Sprite对象上

       在cocos2d中,经常需要将一个action施加到多个Sprites上面,以达到相同的效果。
 
      所以经常会有下面的代码:
CCMoveTo * move =[CCMoveTo actionWithDuration:DESK_ANIMATE_TIME position:point];  
  
[deskImage  runAction:move];  
      [HeadImageSprite runAction:move];  
      [TipsSprite  runAction:move];  


      这个代码会导致crash,原因在于CCMTo这个action的是一个施加在Sprite上面的异步的操作,

[deskImage  runAction:move]  
runAction调用完了之后,会继续调用
[HeadImageSprite runAction:move];  
action的生命周期跟action的变量的定义的生命周期不一样,它需要在action被sprite执行完之后才完成,这个是不受我们的代码的控制的。所以一个action不能施加到多个Sprite上面去。
 
 
      改进的方法如下:
CCMoveTo * move =[CCMoveTo actionWithDuration:DESK_ANIMATE_TIME position:point];  
  
[deskImage  runAction:move];  
      [HeadImageSprite runAction:[move copy]];  
      [TipsSprite  runAction:[move copy]];  

  我们对action做一个copy,copy一份拷贝,然后再施加到其他的Sprite对象上,这样就可以了。

posted on 2012-05-03 09:47  pengyingh  阅读(270)  评论(0)    收藏  举报

导航