1

我目前正在使用 Objective-C 开发 Cocos2D Mac 游戏。

我的运动正常,但我还有一个问题..

我使用这段代码来移动我的播放器,它是一只苍蝇,所以它需要在各个方向上自由移动。

键盘事件:

- (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;
 }
}

游戏时间循环:

-(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);
 }
}

我的问题是当我的播放器向左移动时,不可能同时添加向上键,因此播放器将向左和向上移动。实现这一目标的最佳方法是什么?

4

1 回答 1

1

有一个简单的技巧:声明一个 bool like 数组bool arrows[4],其中每个元素都是一个箭头按钮状态和true == pressed。现在您将一个数组元素在 keyDown 事件中设置为 true,在 keyUp 中设置为 false。你需要的最后一件事 - 一个计时器来检查这个数组并移动对象。

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

于 2010-12-09T11:42:31.697 回答