Cocos2d Engine - Пауза, резюме - PullRequest
4 голосов
/ 02 мая 2011

У меня есть игровая сцена, которая имеет 2 слоя, как показано ниже, когда пользователь нажимает кнопку «Пауза», я добавляю слой окна «Пауза» в качестве дочернего к слою строки состояния.Игра в процессе, так что до сих пор то, что я реализовал, загружало спрайт в мой слой Game и перемещало спрайт в то место, куда пользователь прикасался.

Что касается обработки касаний на «игровом слое», все работает идеально, пока пользователь не нажмет кнопку паузы, и проблема в том, что касание «Игрового слоя» активно даже после вызова [[CCDirector sharedDirector] pause].Я все еще могу перемещать игрока по экрану в режиме паузы.

Пожалуйста, уточните, какова связь между паузой директора и Touch?

Сцена: в игровой сцене 2 ребенка

- GameScene
   - Status Bar Layer #1
     - Pause Button
        Tap 
        {
           [[CCDirector sharedDirector] pause]
           Add pause Window to Status bar layer;
        } 
     - Score Label
     - Life Status icon

   - Game Layer #2

Слой: пауза CCLayer

- PauseGameLayer
  - Resume Button   
     Tap 
     {
         Remove this layer from parent
         [[CCDirector sharedDirector] resume];
     }
  - Restart Level
  - Main menu

Ответы [ 3 ]

3 голосов
/ 09 мая 2011

Когда директор находится в режиме паузы, диспетчер касаний не приостанавливается, он по-прежнему отправляет все события касания. Я реализовал паузу / возобновление игры с состоянием игры (целое число).

int _state;

- (void) pause{
   if(_state == kGameStatePlaying){
      _state = kGameStatePaused;
   //TODO - pause the game
   }
}

- (void) resume{
   if(_state == kGameStatePaused){
      _state = kGameStatePlaying;
   //TODO - resume the game
   }
}

- (void) ccTouchesBegan:(NSSet *) tiuches withEvent:(UIEvent *) event{
   if(_state != kGameStatePlaying) 
      return;
   //.....
}

Использование игрового состояния очень полезно во многих других случаях. В моей реализации я никогда не ставлю паузу на режиссера, когда ставлю игру на паузу. Приостановка режиссера - это самый простой способ приостановить игру, но если вам нужно сделать анимацию в слое паузы (например, прыжки с животными, мигание текста ...), вы, очевидно, не сможете этого сделать, потому что режиссер приостановлен. Решение состоит в том, чтобы приостановить планировщики и действия всех участников игры и самого игрового слоя. Методы паузы и возобновления должны выглядеть следующим образом (предположим, что вы храните все игровые акторы в массиве с именем allActors)

- (void) pause{
   if(_state == kGameStatePlaying){
      _state = kGameStatePaused;
      [self pauseSchedulerAndActions];
      [allActors performSelector:@selector(pauseSchedulerAndActions)];
   }
}

- (void) resume{
   if(_state == kGameStatePaused){
      _state = kGameStatePlaying;
      [self resumeSchedulerAndActions];
      [allActors performSelector:@selector(resumeSchedulerAndActions)];
   }
}

Надеюсь, это поможет:)

0 голосов
/ 02 октября 2013

Вы можете включить или отключить сенсорный, как это:

Отключить касание перед паузой:

[self setIsTouchEnabled:NO] 

Включить снова после возобновления:

[self setIsTouchEnabled:YES]

В cocos2d-x

this->setTouchEnabled(false);
0 голосов
/ 03 мая 2011

Добавление нового слоя, когда пользователь нажимает кнопку «пауза», «слой паузы» с кнопкой возобновления, это может решить вашу проблему, но я не знаю, является ли это правильным решением.

Может быть, эта ссылка может вам помочь Cocos2d pause

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...