2013-05-03 42 views
0

我有一個使用手指滑動移動的播放器精靈(ccTouchBegan到ccTouchMoved)。我想讓我的行動在TouchEnded後停止,但我不想讓行動結束一半。所以我想我會需要我的onCallFunc來檢查觸摸是否結束,如果有的話,它有exicute stopAllActions。關於如何做到這一點的任何想法?如何讓CCSequence檢查TouchEnded = True

-(void) onCallFunc 
{ 
    // Check if TouchEnded = True if so execute [Player stopAllActions]; 
    CCLOG(@"End of Action... Repeat"); 
} 

- (空)ccTouchMoved:

//Move Top 
     if (firstTouch.y < lastTouch.y && swipeLength > 150 && xdistance < 150 && xdistance > -150) {   
      CCMoveTo* move = [CCMoveBy actionWithDuration:0.2 position:ccp(0,1)]; 
      CCDelayTime* delay = [CCDelayTime actionWithDuration:1]; 
      CCCallFunc* func = [CCCallFunc actionWithTarget:self selector:@selector(onCallFunc)]; 
      CCSequence* sequence = [CCSequence actions: move, delay, func, nil]; 
      CCRepeatForever* repeat = [CCRepeatForever actionWithAction:sequence]; 
      [Player runAction:repeat]; 
      NSLog(@"my top distance = %f", xdistance); 
     } 
     if (firstTouch.y < lastTouch.y && swipeLength > 151 && xdistance < 151 && xdistance > -151) { 
      NSLog(@"my top distance = %f", xdistance); 
     } 

    } 

我想要實現:我試圖模仿這樣的比賽就像寵物小精靈和塞爾達進行的移動通過讓玩家移動通過平鋪使用觸摸事件平鋪。

更新:在創建布爾標誌的註釋後 我使用Objective-C很新,但這裏是我試圖使用BOOL標誌。我正在爲每個部分獲取未使用的變量警告。

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    BOOL endBOOL = YES; 
    NSLog(@"Stop Actions"); 
} 

-(void) onCallFunc 
{ 
    if(endBOOL == YES){ 
     [Player stopAllActions]; 
    } 
    // Check if TouchEnded = True if so execute [Player stopAllActions]; 
    CCLOG(@"End of Action... Repeat"); 
} 
+0

添加一個布爾標誌,並將其設置在觸摸端,然後檢查它onCallFunc。我不太喜歡永遠重複的設計選擇,但我沒有得到你想要達到的。 – Ultrakorne 2013-05-03 23:18:22

+0

我添加了'我試圖實現的內容':' – 2013-05-03 23:25:35

回答

0

您正在獲取未使用的變量警告,因爲您正在創建BOOL標誌,因此從不使用它。在您的代碼:

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    BOOL endBOOL = YES; 
    NSLog(@"Stop Actions"); 
} 

創建內部ccTouchesEnded的BOOL標誌endBOOL,一旦該方法完成BOOL不再保存在內存中。爲了達到你想要的目的,你需要創建一個實例變量。

內,您的.H添加此

// Inside .h 
BOOL endBOOL; 

然後更改您的代碼

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    endBOOL = YES; 
    NSLog(@"Stop Actions"); 
} 

endBOOL這樣被保留,您可以在if語句中使用它。另請注意,(endBOOL == YES)不是必需的。你可以簡單地使用這個:

-(void) onCallFunc 
{ 
    if(endBOOL){ 
     [Player stopAllActions]; 
    } 
    // Check if TouchEnded = True if so execute [Player stopAllActions]; 
    CCLOG(@"End of Action... Repeat"); 
} 
相關問題