Objective-C ccKeyDown игрока движение - PullRequest
1 голос
/ 09 декабря 2010

Я в настоящее время работаю над Cocos2D Mac Game в Objective-C.

У меня работает движение, но у меня есть еще один вопрос ..

Я использую этот код для перемещения моегоигрок, это муха, поэтому ему нужно свободное движение во всех направлениях.

Событие клавиатуры:

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

Моя проблема, когда мойигрок движется влево, невозможно добавить клавишу вверх одновременно, поэтому игрок будет двигаться влево и вверх.Каков наилучший способ достичь этого?

1 Ответ

1 голос
/ 09 декабря 2010

Существует простой способ: объявить массив типа bool, например bool arrows[4], где каждый элемент является состоянием кнопки со стрелкой, а true == нажат . Теперь вы устанавливаете для элемента массива значение true в событии keyDown и значение false в keyUp. Последнее, что вам нужно - это таймер для проверки этого массива и перемещения объектов.

На самом деле, таймер - лучшее решение, чем обычная обработка событий, потому что вы можете контролировать «скорость обработки ключей».

...