将调度程序放在CCSequence中

时间:2012-09-16 22:37:52

标签: objective-c cocos2d-iphone

所以基本上我有2个调度函数,我想把它放在CCSequence中。

id func1 = [CCCallFuncN actionWithTarget:self selector:@selector(pan1)];
id func2 = [CCCallFuncN actionWithTarget:self selector:@selector(pan2)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];

pan1从左到右进行平移,pan2从右到左进行平移。

-(void) pan1{
    [self schedule:@selector(panLtoR) interval:0.05]; 
}

-(void) pan2{
    [self schedule:@selector(panRtoL) interval:0.05];
}

我想要的结果是在func2开始之前完全完成func1。 但是现在...... func2在func1仍在运行时开始。我无法弄清楚原因。 我怎么解决这个问题?提前谢谢。

添加了: 以下是panLtoR的代码如何

-(void) panLtoR{
   [self panLtoR: 1 andY:0.5];
} 

-(void) panLtoR:(float) x andY: (float) y{

   float rightAnchorX = x - m_minAnchorX;

   if(m_curAnchorX <= rightAnchorX)
   {
       m_img.anchorPoint = ccp(m_curAnchorX, y);
       m_curAnchorX += 0.005;
   }

    else{
       [self unschedule:@selector(panLtoR)];
   }
}

和panRtoL做类似的事情。基本上我想要做的是通过移动锚点而不是位置来实现平移。如何在启动func2之前完成func1?

1 个答案:

答案 0 :(得分:1)

让我们分解你所写的内容:

id func1 = [CCCallFuncN actionWithTarget:self selector:@selector(pan1)];
id func2 = [CCCallFuncN actionWithTarget:self selector:@selector(pan2)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];

此处,这意味着致电pan1,完成后,请致电pan2。这基本上只是:

[self pan1];
[self pan2];

这意味着您的两个调度程序(几乎)同时开始。他们在内部进行的行动将相互对抗。


虽然我无法准确地说出你想要用有限的代码完成什么,但我期望你想要的是类似的东西:

id func1 = [CCMoveBy actionWithDuration:0.5f position:ccp(-100, 0)];
id func2 = [CCMoveBy actionWithDuration:0.5f position:ccp( 100, 0)];
id seq = [CCSequence actions: func1, func2, nil];
[img runAction:seq];