2011-06-09 165 views
0

我試圖強制一個動作完成,然後才能調用另一個動作。我查看了各種時間延遲和CCSequencing的例子,這是迄今爲止,但它仍然無法正常工作。我需要完整的.5出現在另一個動作之前(無論是向左,向右還是向下)。只要你在動作完成之前沒有按下按鈕,所有事情都會發揮作用,那就是當先前的動作被縮短時。cocos2d iphone等待動作完成/完成

-(void) moveup{ 
    CCNode *mySprite = [self getChildByTag:kTagSprite]; 
    //moves sprite up 30 pixels in 1/2 second 
    [mySprite runAction: [CCMoveTo actionWithDuration:.5 position:ccp(mySprite.position.x, mySprite.position.y+30)]]; 
} 

//this is inside CCtouchesbegan. upsprite is a box that gets clicked to move the object up 
if(CGRectContainsPoint([upsprite boundingBox], point)){ 
    //should call CCSequence of events, method moveup, and then CCDelayTime, forcing a pause 
    [self runAction:[CCSequence actions:[CCCallFuncND actionWithTarget:self selector:@selector(moveup) data:nil], [CCDelayTime actionWithDuration:.5], nil]]; 
} 

我試着用[[CCDirector sharedDirector] pause]暫停但這凍結一切,包括我的移動精靈。在我目前的例子中,CCDelayTime似乎不起作用。

我知道這個問題有點像ccsequencing其他人的副本,所以如果它需要被標記爲複製,那很好,但我真的很喜歡一些幫助,因爲它真的讓我失望。

回答

1

你可以做一個BOOL「鎖定」的變量,只有運行在「mySprite上」的動作:

if(lock) {[mySprite runAction:...];} 

在年初設定的BOOL鎖NO,每次你開始行動將其設置爲「 YES「...然後將CCCallFunc添加到CCSequence中,將鎖定設置爲」NO「

+0

這與我最終做的相似。最簡單的方法是調用初始移動動作,然後在該調用下調用[lolosprite runAction:[CCSequence actionOne:[CCDelayTime actionWithDuration:.5] two:[CCCallFunc actionWithTarget:self selector:@selector(enabletouch)]]] ]。使用它你可以直接禁用觸摸,直到你用方法enabletouch再次打開它。我正在用CCAction方法(isdone)嘗試bool方法,但isdone總是返回false,所以bool從未被設置回解鎖狀態。我仍不確定爲什麼isdone沒有工作。 – 2011-06-10 14:37:12

+0

我有同樣的問題,不知道我是否理解你的解決方案 – RollRoll 2014-08-12 15:34:45