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