2012-02-21 85 views
0

我在一个序列中有一个简单的CCRotateBy动作;它后面是另一个方法的调用它证实了CCRotateBy完成(否则,CCCallFunc不会被调用的顺序,如果CCRotateBy没有完成):CCRotateBy没有完成

-(void)correctRotation{ 
    if (self.rotationAmount){ 
    CCLOG(@"correcting rotation inside: %i",self.buildNum); 
    CCRotateBy*second=[CCRotateBy actionWithDuration:1 angle:-self.rotationAmount]; 
    CCEaseBackInOut*bounce2=[CCEaseBackInOut actionWithAction:second]; 
    CCCallFunc*func=[CCCallFunc actionWithTarget:self selector:@selector(stabilize)]; 
    CCSequence*seq=[CCSequence actions:bounce2,func, nil]; 
    [self runAction:seq]; 
    } 
} 

-(void)stabilize{ 
     CCLOG(@"stabilize before rotation: %i for %i",self.rotationAmount,self.buildNum); 
    self.rotationAmount=0; 
     CCLOG(@"stabilize after rotation: %i for %i",self.rotationAmount,self.buildNum);  
} 

的CCLOG语句确认旋转应该发生,并且旋转的角度不是零(它总是一个整数)。这些日志还显示CCSequence正在完成。但是,精灵不在屏幕上旋转。我一直在努力研究这个代码几个小时,试图找出可能出错的地方。如果精灵的动作被停止,那么这3个日志语句就不会完成,对吗?

+0

怪......嗯,有过类似的一个过去与另一间隔动作(科科斯版本99.4的时候)。你是否试图'摇动'系统并尝试CCRotateTo self.rotation + self.rotationAmount?那为我修好了... – YvesLeBorg 2012-02-21 04:50:46

+0

我不知道CCSprite有一个旋转属性;它不在课堂参考中。这应该是精灵的旋转角度? – johnbakers 2012-02-21 11:49:00

+1

CCSprite像cocos中的大多数(所有?)对象都从具有旋转属性的CCNode派生。我只是做了一个快速测试,它是可以设置的。此外(这听起来可能很愚蠢)你有没有证实self.isRunning是真的? – YvesLeBorg 2012-02-21 13:40:56

回答

1

正如@tassinari说,尝试删除反弹功能。

这是从cocos2d的API参考

http://www.cocos2d-iphone.org/api-ref/1.1.0/interface_c_c_ease_back_in_out.html

Warning: 
This action doesn't use a bijective function. Actions like Sequence might have an 
unexpected result when used with this action. 
+0

有用,谢谢,但不是问题的原因。我拿出了缓和动作,只用直线旋转动作,但问题仍然存在,并且相同 – johnbakers 2012-02-21 04:03:28

+0

何时调用correctRotation函数?我只是在我的项目上测试了一个类似的代码并且工作正常,所以也许问题出在你调用函数的时候。你确定rotateAmount> 0吗?只需确保一个固定的号码就可以了。 – Setrio 2012-02-21 11:39:54

0

快速查看,但你没有在你的序列中调用CCRotateBy。 '第二'行动不在序列中。

+0

对不起,刚刚看到它在你的反弹动作中,也许在你调试时删除了缓进/退出。 – tassinari 2012-02-21 03:30:12