2012-09-16 41 views
1

所以基本上我有2個調度程序函數,我想把它們放在CCSequence中。把調度程序放在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]; 
} 

我希望的結果是讓func1在func2開始之前完全完成。 但是現在...當func1仍在運行時,func2開始。我無法弄清楚爲什麼。 我該如何解決這個問題?提前致謝。

補充: 這裏的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

您可以顯示平移代碼?這可能有助於制定更好的解決方案。 –

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

感謝您的回覆。 所以基本上我試圖通過錨點而不是位置來平移。所以我不能使用CCMoveBy。 我已將panLtoR的代碼添加到我的原始帖子中。 –

+0

歡迎來到Stack Overflow。當你認爲答案有用時,你應該投票。這是說「謝謝」的標準方式。如果答案是最有幫助的,那麼您應該將其標記爲正確。 –