2010-12-09 59 views
1

我目前正在Objective-C的Cocos2D Mac遊戲中工作。Objective-C ccKeyDown播放器移動

我已經得到了移動工作,但我有一個問題..

我用這個代碼將我的播放器,它是一隻蒼蠅所以它需要在各個方向自由移動。

鍵盤事件:

- (void)ccKeyDown:(NSEvent*)keyDownEvent 
{ 
// Get pressed key (code) 
NSString * character = [keyDownEvent characters]; 
     unichar keyCode = [character characterAtIndex: 0]; 

// Player movement 
if (keyCode == 119) { 
    playerMoveUp = TRUE; 
} else if (keyCode == 115) { 
    playerMoveDown = TRUE; 
} 
if (keyCode == 100) { 
    playerMoveLeft = TRUE; 
} else if (keyCode == 97) { 
    playerMoveRight = TRUE; 
} 
} 

- (void)ccKeyUp:(NSEvent*)keyUpEvent 
{ 
// Get pressed key (code) 
NSString * character = [keyUpEvent characters]; 
     unichar keyCode = [character characterAtIndex: 0]; 

// Player movement 
if (keyCode == 119) { 
    playerMoveUp = FALSE; 
} else if (keyCode == 115) { 
    playerMoveDown = FALSE; 
} 
if (keyCode == 100) { 
    playerMoveLeft = FALSE; 
} else if (keyCode == 97) { 
    playerMoveRight = FALSE; 
} 
} 

Gametime循環:

-(void) tick: (ccTime) dt 
{ 
// Get player current position 
NSInteger playerPositionX = player.position.x; 
NSInteger playerPositionY = player.position.y; 

// Player movement 
if (playerMoveUp == TRUE) { 
    player.position = ccp(playerPositionX, playerPositionY + 1); 
} 
if (playerMoveDown == TRUE) { 
    player.position = ccp(playerPositionX, playerPositionY - 1); 
} 
if (playerMoveLeft == TRUE) { 
    player.position = ccp(playerPositionX + 1, playerPositionY); 
} 
if (playerMoveRight == TRUE) { 
    player.position = ccp(playerPositionX - 1, playerPositionY); 
} 
} 

我的問題是,當移動離開了我的球員是不可能添加上鍵的同時,讓玩家將向左和向上移動。達到此目的的最佳方法是什麼?

回答

1

有一個簡單的訣竅:聲明一個布爾數組,如bool arrows[4],其中每個元素是一個箭頭按鈕狀態和true ==按。現在,您在keyDown事件中將數組元素設置爲true,並在keyUp中將其設置爲false。你需要的最後一件事 - 一個計時器來檢查這個數組並移動對象。

實際上,定時器比常規事件處理更好的解決方案,因爲您可以控制「按鍵處理速度」。