2015-02-11 50 views
1

我試圖防止精靈在半空中再次跳躍。但是,我實施的方式是錯誤的,而且我真的迷失了方向。防止用戶在空中跳躍

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CCActionJumpBy *jump_up = [CCActionJumpBy actionWithDuration:1.0f position:ccp(0, 100) height:50 jumps:1]; 
    [player runAction:jump_up]; 
    CCActionJumpBy *come_down = [CCActionJumpBy actionWithDuration:1.0f position:ccp(0, -100) height:50 jumps:1]; 
    [player runAction:come_down]; 

} 

-(void) touchEnded:(UITouch *)touch withEvent:(UIEvent *)event { 
    CCActionDelay *delay = [CCActionDelay actionWithDuration:2.0]; 
    [player runAction:delay]; 
} 

從我的理解來看,延遲應該防止用戶再次跳躍。有小費嗎?對不起,我是objective-c的新手。

+1

您可能想要檢查您的用戶是否正在接觸地面,或者垂直加速度爲0. – njzk2 2015-02-11 19:21:21

回答

1

實際上,CCActionDelay對於在一系列操作中創建一個暫停是有用的,在這種情況下並不真正有用。相反,我會開始觸摸「跳躍」狀態,而不是擔心touchEnded,因爲這一點。

,您將需要一個屬性來控制這種狀態:

@屬性(非原子,讀寫)BOOL isPlayerJumping;

,改變touchBegan如下:

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    if (!self.isPlayerJumping) { 
     CCActionJumpBy *jump_up = [CCActionJumpBy actionWithDuration:1.0f position:ccp(0, 100) height:50 jumps:1]; 
     CCActionJumpBy *come_down = [CCActionJumpBy actionWithDuration:1.0f position:ccp(0, -100) height:50 jumps:1]; 
     CCActionCallBlock *end_jump = [CCCallBlock actionWithBlock:^{ 
      self.isPlayerJumping = NO; 
     }]; 
     CCActionbSequence *seq = [CCActionSequence actions:jump_up,come_down,end_jump,nil]; 
     [player runAction:seq]; 
     self.isPlayerJumping = YES; 
    } 
} 

}

obcit:不編譯,測試,只是它的想法。有多種方法可以做到這一點:)

+0

編譯並測試它!有用! 95%哈哈。出於某種原因,當精靈跳出其位置時,它會在某種微小跳躍出現之前發生。 D: – 2015-02-11 21:37:08

+0

哦,我沒注意。雖然我不使用它們,但我認爲CCActionJumpBy已經是一個上下運動。改爲嘗試CCActionMoveBy。並且,如果解決方案阻止「跳躍跳躍」,這是您正在尋找的答案:) – YvesLeBorg 2015-02-11 21:51:47

+0

謝謝@YvesLeborg :)現在一切都很好!我仍然設法保持CCActionJumpBy,我只是讓come_down函數有0個跳轉來阻止隨機運動。 – 2015-02-11 23:08:34