我決定創建一個像遊戲一樣的內存,以用unity3d學習遊戲開發。
玩家點擊卡片後,遊戲應等待2秒鐘,然後再將卡片翻轉回來。
yield return new WaitForSeconds(2)
-statement應該是完美的,但它的作用是不執行任何函數行。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
,工作一切正常(除了玩家看不到第二張牌,因爲它立即翻轉)。
我的收益回報有什麼問題?
+1我真的很喜歡戲劇性的標題。 –