Я решил создать небольшую память, например игру, чтобы научиться разрабатывать игры с помощью unity3d.
Игра должна ждать 2 секунды после того, как игрок нажал на карты, прежде чем она перевернет карты обратно.
Оператор yield return new WaitForSeconds(2)
должен быть идеальным. для этого, но это приводит к тому, что ни одна строка функции не выполняется.
Вот мой код:
Это создает сетку карт (с кнопками) и вызывает функцию для переворачивания карты при нажатии на карту.
Card card = grid[i, j];
if (GUILayout.Button(new GUIContent((Texture) Resources.Load(card.getImg()), ""), GUILayout.Width(cardWidth))) {
Debug.Log("Call FlipCard");
FlipCardFaceUp(card);
Debug.Log("Returned from FlipCard");
}
Это функция флипа:
System.Collections.IEnumerable FlipCardFaceUp(Card card) {
Debug.Log("This isn't shown in the console");
card.isFaceUp = true;
if (!cardsFlipped.Contains(card)) {
cardsFlipped.Add(card);
if (cardsFlipped.Count >= 2) {
playerCanClick = false;
//Waiting 2 seconds before the cards are flipped back or are removed
yield return new WaitForSeconds(2);
if (cardsFlipped[0].id == cardsFlipped[1].id) {
cardsFlipped[0].isMatched = true;
cardsFlipped[1].isMatched = true;
} else {
cardsFlipped[0].isFaceUp = false;
cardsFlipped[1].isFaceUp = false;
}
cardsFlipped.Clear();
playerCanClick = true;
}
}
}
Это вывод консоли, когда я тестирую свою игру и нажимаю на карту:
Call FlipCard
Returned from FlipCard
Если убрать то, что нужно для yield return
, работает все нормально (разве что вторую карту игрок не видит, т.к. она тут же переворачивается).
Что не так с моей доходностью?
StartCoroutine("FlipCardFaceUp", card)
24.10.2012yield return StartCoroutine(FlipCardFaceUp(card))
, чтобы дождаться завершения сопрограммы? (см. редактирование) 24.10.2012