кнопка воспроизведения для нескольких игроков в игре для ios с использованием spritebuilder

#ios #objective-c #spritebuilder

#iOS #objective-c #spritebuilder

Вопрос:

Я создаю игру в стиле настольной игры. Есть два игрока, игрок 1 и игрок 2. Игрок 1 запускается нажатием кнопки воспроизведения игрока 1. Их спрайт перемещается вперед на случайное количество плиток. Затем игрок 2 начинает свой ход, нажав кнопку воспроизведения игрока 1. В конце каждого хода я регистрировал, чья очередь была, когда я нажимал кнопку воспроизведения игрока 2 после нажатия кнопки воспроизведения игрока 1. Он регистрирует сообщение о том, что все еще очередь игрока 1. Почему это так? Это мой код:

 - (void)player1play {
isPlayer1turn = YES;
CCLOG(@"Beggining of player 1's turn");
NSLog(@"%hhd", isPlayer1turn);
if (_randNumLabel == nil)
{
    CCLOG(@"Nil");
}
if (_randNumLabel !=nil)
{
CCLOG(@"play button pressed!");
int max = 6;
int randNumber = (arc4random() % max)   1; // Generates a number between 1-6.
CCLOG(@"Random Number %d", randNumber);
_randNumLabel.string = [NSString stringWithFormat:@"Number: %d", randNumber];
}
//Movement code
isPlayer1turn = NO;
CCLOG(@"End of player 1's turn");
NSLog(@"%hhd", isPlayer1turn);
  

}

 - (void)player2play {
if (isPlayer1turn == YES)
{
    isPlayer1turn = NO;
    CCLOG(@"Beggining of player 2's turn");
    NSLog(@"%hhd", isPlayer1turn);
    if (_randNumLabel == nil)
{
    CCLOG(@"Nil");
}
if (_randNumLabel !=nil)
{
    CCLOG(@"play button pressed!");
    int max = 6;
    int randNumber = (arc4random() % max)   1; // Generates a number between 1-6.
    CCLOG(@"Random Number %d", randNumber);
    _randNumLabel.string = [NSString stringWithFormat:@"Number: %d", randNumber];
}
isPlayer1turn = TRUE;
    CCLOG(@"End of player 2's turn");
NSLog(@"%hhd", isPlayer1turn);
}
}
  

Как я могу это исправить? Или было бы лучше иметь только одну кнопку воспроизведения?

После нажатия кнопки воспроизведения игрока 1:

 014-06-18 20:50:33.450 Sunk[8091:60b] Beggining of player 1's turn
2014-06-18 20:50:33.451 Sunk[8091:60b] 1
2014-06-18 20:50:33.451 Sunk[8091:60b] play button pressed!
2014-06-18 20:50:33.452 Sunk[8091:60b] Random Number 1
2014-06-18 20:50:33.453 Sunk[8091:60b] End of player 1's turn
2014-06-18 20:50:33.454 Sunk[8091:60b] 0
  

После нажатия кнопки воспроизведения проигрывателя 2:

 2014-06-18 20:52:26.666 Sunk[8091:60b] 1
2014-06-18 20:52:26.667 Sunk[8091:60b] play button pressed!
2014-06-18 20:52:26.668 Sunk[8091:60b] Random Number 5
2014-06-18 20:52:26.668 Sunk[8091:60b] End of player 1's turn
2014-06-18 20:52:26.669 Sunk[8091:60b] 0
  

Комментарии:

1. Можете ли вы вставить то, что зарегистрировано, в то, что, по вашему мнению, должно быть зарегистрировано?

2. Только что сделал, кнопка воспроизведения игрока 2 и кнопка воспроизведения игрока 1

Ответ №1:

Вот что ваш код делает на самом деле:

  1. player1Play
  2. установите isPlayer1Turn = ДА
  3. установить isPlayer1Turn = НЕТ
  4. player2Play
  5. установите isPlayer1Turn = ДА
  6. NSLOG isPlayer1Turn

Я не уверен, почему вы беспокоитесь об отслеживании хода игрока, поскольку у вас есть 2 кнопки, предназначенные для этой задачи, и не препятствуйте использованию кнопки, если это не ход нужного игрока, а оператор if в -(void)player2Play:

 if (isPlayer1turn == YES)
  

вероятно, предполагается isPlayer1Turn == NO , что для вашей конкретной логики. Но вместо того, что вы делаете, вы можете захотеть сделать что-то вроде использования логического значения isPlayer1Turn, чтобы определить, как может выглядеть и работать одна кнопка воспроизведения.

 -(void)playButtonPressed{
    if (isPlayer1Turn) {
        //do all the things for player 1
        isPlayer1Turn = NO;
    }else{
        //do all the things for player 2
        isPlayer1Turn = YES;
    }
    [self changeTheOneTruePlayButton];
}

-(void)changeTheOneTruePlayButton{
    if (isPlayer1Turn) {
        //change play button text to PLAYER 1
    }else{
        //change play button text to PLAYER 2
    }
}