1

所以基本上我有 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?

4

1 回答 1

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];

在这里,这意味着 call pan1,完成后, call 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];
于 2012-09-16T23:05:49.760 回答