尝试在按下 UI 按钮时增加协程中的变量
Trying to increment a variable in a Coroutine on pressing a UI button
我正在为 children 制作一个简单的问答游戏。我在其中从 json 文件中提取问题。每个问题都有一个 10 秒的计时器,如果按下按钮,则会显示下一个问题。我面临的问题是我似乎无法找到控制 "yeild return waitforseconds()" 的方法。我尝试了多种方法,但 none 似乎有效,如果我尝试更改 waitforseconds() 中的值,它会过快地跳过下一个问题,或者如果尝试递增 questionCounter 变量,它会卡在同一个问题上。我一直在寻找一段时间,但找不到任何东西。我明天有截止日期,我真的需要一些帮助。
//this is my question changing method
IEnumerator QuestionRoutin(Course c, int n)
{
while (qCounter < 3)
{
print(qCounter);
r = UnityEngine.Random.Range(0, 6);
//Question.text = c.Ques_Data[r].Quesion;
//RandomButton(c, r);
//amil = c.Ques_Data[r].Answer;
if(checkq.Count==0)
{
checkq.Add(r);
Question.text = c.Ques_Data[r].Quesion;
RandomButton(c, r);
amil = c.Ques_Data[r].Answer;
}
else if (checkq.Contains(r)==false)
{
checkq.Add(r);
Question.text = c.Ques_Data[r].Quesion;
RandomButton(c, r);
amil = c.Ques_Data[r].Answer;
}
else
{
continue;
}
if (f == true) //f is a global bool
{
f = false;
qCounter++;
//yield return new WaitForSeconds(1.0f);
}
else
{
yield return new WaitForSeconds(10);
qCounter++;
}
}
print("questions are finished");
}
//this a function attach to my buttons
public void CheckAnswer(Text button_txt)
{
//time_1 = 10.0f;
if (button_txt.text == amil)
{
flag = true;
Animator anim = Correct_Panel.GetComponentInChildren<Animator>();
if (anim != null)
{
Correct_Panel.SetActive(true);
bool isRightAnsPressed = anim.GetBool("isRightAnsPressed");
anim.SetBool("isRightAnsPressed", !isRightAnsPressed);
Invoke("disableCorrectPanel", 1.0f);
score_value = score_value + 10;
score.text = "Score: " + score_value;
//have tried all these 3 things
//StartQuestionRoutine(c1, n,true);
//qCounter++;
// flag = true;
}
}
现在我知道了,我会说如果我在按钮中调用它,协程将再次重新启动,但似乎没有其他工作。如果我的按钮是否按下,我还会怎样?请我真的需要一些帮助。
在重新启动协程之前,您是否尝试过停止协程:
private IEnumerator coroutine;
:
:
if(coroutine != null) StopCoroutine(coroutine);
coroutine = StartCoroutine(QuestionRoutin(.....));
我正在为 children 制作一个简单的问答游戏。我在其中从 json 文件中提取问题。每个问题都有一个 10 秒的计时器,如果按下按钮,则会显示下一个问题。我面临的问题是我似乎无法找到控制 "yeild return waitforseconds()" 的方法。我尝试了多种方法,但 none 似乎有效,如果我尝试更改 waitforseconds() 中的值,它会过快地跳过下一个问题,或者如果尝试递增 questionCounter 变量,它会卡在同一个问题上。我一直在寻找一段时间,但找不到任何东西。我明天有截止日期,我真的需要一些帮助。
//this is my question changing method
IEnumerator QuestionRoutin(Course c, int n)
{
while (qCounter < 3)
{
print(qCounter);
r = UnityEngine.Random.Range(0, 6);
//Question.text = c.Ques_Data[r].Quesion;
//RandomButton(c, r);
//amil = c.Ques_Data[r].Answer;
if(checkq.Count==0)
{
checkq.Add(r);
Question.text = c.Ques_Data[r].Quesion;
RandomButton(c, r);
amil = c.Ques_Data[r].Answer;
}
else if (checkq.Contains(r)==false)
{
checkq.Add(r);
Question.text = c.Ques_Data[r].Quesion;
RandomButton(c, r);
amil = c.Ques_Data[r].Answer;
}
else
{
continue;
}
if (f == true) //f is a global bool
{
f = false;
qCounter++;
//yield return new WaitForSeconds(1.0f);
}
else
{
yield return new WaitForSeconds(10);
qCounter++;
}
}
print("questions are finished");
}
//this a function attach to my buttons
public void CheckAnswer(Text button_txt)
{
//time_1 = 10.0f;
if (button_txt.text == amil)
{
flag = true;
Animator anim = Correct_Panel.GetComponentInChildren<Animator>();
if (anim != null)
{
Correct_Panel.SetActive(true);
bool isRightAnsPressed = anim.GetBool("isRightAnsPressed");
anim.SetBool("isRightAnsPressed", !isRightAnsPressed);
Invoke("disableCorrectPanel", 1.0f);
score_value = score_value + 10;
score.text = "Score: " + score_value;
//have tried all these 3 things
//StartQuestionRoutine(c1, n,true);
//qCounter++;
// flag = true;
}
}
现在我知道了,我会说如果我在按钮中调用它,协程将再次重新启动,但似乎没有其他工作。如果我的按钮是否按下,我还会怎样?请我真的需要一些帮助。
在重新启动协程之前,您是否尝试过停止协程:
private IEnumerator coroutine;
:
:
if(coroutine != null) StopCoroutine(coroutine);
coroutine = StartCoroutine(QuestionRoutin(.....));