2010-12-09 25 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。你需要的最后一件事 - 一个计时器来检查这个数组并移动对象。

实际上,定时器比常规事件处理更好的解决方案,因为您可以控制“按键处理速度”。