【发布时间】:2017-04-26 10:08:02
【问题描述】:
所以我非常不喜欢 C#。我目前正在学习制作记忆游戏的教程 (https://www.youtube.com/watch?v=prfzIpNhQMM)。
我已经全部遵循并设法解决了我到目前为止遇到的所有问题;每次我单击播放时,Unity 都会冻结。视频中有一些与创作者有相同问题的人说这可能是由于代码中的无限循环。我没有足够的知识来识别其中之一。
我知道问题出在我的 GameManager 脚本上。如果有人可以查看一下,看看他们是否能找到我的问题,我将不胜感激:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
using System.Collections.Generic;
public class GameManager : MonoBehaviour {
public Sprite[] cardFace;
public Sprite cardBack;
public GameObject[] cards;
public Text matchText;
private bool _init = false;
private int _matches = 6;
// Update is called once per frame
void Update () {
if (!_init)
initializeCards ();
if (Input.GetMouseButtonUp(0))
checkCards();
}
void initializeCards()
{
for(int id = 0; id < 2; id++)
{
for(int i = 1; i < 6; i++)
{
bool test = false;
int choice = 0;
while (!test) {
choice = Random.Range(0, cards.Length);
test = !(cards[choice].GetComponent<Card>().initialized);
}
cards[choice].GetComponent<Card>().cardValue = i;
cards[choice].GetComponent<Card>().initialized = true;
}
}
foreach (GameObject c in cards)
c.GetComponent<Card>().setupGraphics();
if (!_init)
_init = true;
}
public Sprite getCardBack()
{
return cardBack;
}
public Sprite getCardFace(int i)
{
return cardFace[i - 1];
}
void checkCards()
{
List<int> c = new List<int>();
for(int i = 0; i < cards.Length; i++)
{
if (cards[i].GetComponent<Card>().state == 1)
c.Add(i);
}
if (c.Count == 2)
cardComparison(c);
}
void cardComparison(List<int> c)
{
Card.DO_NOT = true;
int x = 0;
if(cards[c[0]].GetComponent<Card>().cardValue == cards[c[1]].GetComponent<Card> ().cardValue)
{
x = 2;
_matches--;
matchText.text = "Number of Matches: " + _matches;
if (_matches == 0)
SceneManager.LoadScene("VirusInfo3");
}
for(int i = 0; i < c.Count; i++)
{
cards[c[i]].GetComponent<Card>().state = x;
cards[c[i]].GetComponent<Card>().falseCheck();
}
}
}
谢谢!
【问题讨论】:
-
我在这段代码中看不到任何可能导致无限循环的东西。您必须发布其他脚本。它可能不是来自您发布的这个。我可能错了……
-
我认为你犯了错误“我知道问题出在我的 GameManager 脚本上”并且你已经发布了
Card类。 -
你能分享你的 GameManager 脚本吗?视频下方的 cmets 有一个:pastebin.com/MMV5gkFs,但我不确定它是否与您的相同。如果是这种情况,则 checkCards() 方法有一个无限循环:` for (int i = 0; 1
-
哇,我是个大白痴,不知道我是怎么把它们混在一起的。现在已经用实际代码编辑了原始问题。是的@buxter 我看到了那个评论并检查了我自己的,但它似乎没问题。当我删除它时,它对 GameManager 脚本进行了删除,Unity 工作正常。
标签: c# unity3d infinite-loop