本帖最后由 youthpasses 于 2012-01-07 17:44:00 编辑

解决方案 »

  1.   

    cocos2d我刚接触,不太懂,问了旁边的人,说是可能必须起线程了。
      

  2.   

    我知道怎么解决了,[bg runAction:[action1 copy]];这样就好了!
      

  3.   

    弱弱的问一句:[bg runAction:[action1 copy]] 会不会内存泄露?
      

  4.   

    正解:
    要想一个 CCNode 跑一个action,就要对每个CCnode定制特定的action,你在调用的runAction的时候,其实不是在修改CCnode的属性,而是在CCActionManager中注册你的Action,而且每个Action在manager中是惟一的,也只能对一个CCNode服务!所以楼主的调用顺序是:首先你把action1在CCActionManager中注册给对象smallchuck,紧接着,你又把action1注册给了对象bg,然后第一次注册就会失效,他只能为bg对象服务!你最后的解决方案是 [action1 copy],其实就是新建了一个不同内存地址的Action,然后注册给了bg,现在是2个action对应2个对象,当然就好了!
    三楼说的会不会内存泄露,我想说的是,你在删除的对象之前,记得[CCnode stopAction:action1]就不会有问题!否则,你的action会一直存在于CCActionManager中,而不会随着对象的消失而消失,会内存泄露!
      

  5.   

    补充一点,Action本身就是开辟一个线程!你的问题本质是 少启动一个线程!
      

  6.   


    这位兄弟说得也对,不过“我想说的是,你在删除的对象之前,记得[CCnode stopAction:action1]就不会有问题!否则,你的action会一直存在于CCActionManager中,而不会随着对象的消失而消失,会内存泄露!”这句话其实也不是很对啊,
    -(void) removeFromParentAndCleanup:(BOOL)cleanup;
    -(void) removeChild: (CCNode*)node cleanup:(BOOL)cleanup;
    -(void) removeChildByTag:(NSInteger) tag cleanup:(BOOL)cleanup;
    -(void) removeAllChildrenWithCleanup:(BOOL)cleanup;这是CCNODE的删除对象的方法,后面带了一个cleanup参数,如果你将cleanup的值设为YES,系统在删除对象的时候会对自动对当前对象进行stopAllActions的操作的。
      

  7.   

    3Q 提醒,我也发现了,cleanup方法有调用[stopAllActions];还有个取消所有注册函数的方法,嗯受教了!
      

  8.   

    jingfan2011回答有点错误:run CCAction不启动一个线程。都是在主线程的的每一帧里step运行的。