这是使用Unity3D。我有三个协程: GetJSONFromSelectedSubreddit()
, LoadMoreMemes()
, 以及在一个单独的脚本中需要能够通过GetNewMemes()
函数(必须返回类型为Meme[])访问memes数组的函数。LoadNewMemes()
生成了这个数组。问题是,LoadMoreMemes()
需要json才能运行,所以它们必须按照提到的顺序运行。如果你需要这些函数,这里它们:
public void GetNewMemes(string subReddit, int count)
{
SetSelectedSubreddit(subReddit);
memesAtATime = count;
subJSON = null;
StartCoroutine(GetJSONFromSelectedSubreddit());
StartCoroutine(LoadMoreMemes());
}
IEnumerator GetJSONFromSelectedSubreddit()
{
gettingJSON = true;
WWW requester = new WWW("https://www.reddit.com/r/" + selectedSub + "/new.json?sort=new&count=25&after=" + postIndex);
yield return requester;
subJSON = requester.text;
json = new JSONObject(subJSON);
gettingJSON = false;
}
IEnumerator LoadMoreMemes()
{
while (gettingJSON)
yield return new WaitForSeconds(0.1f);
for (int i = 0; i < memesAtATime; i++)
{
yield return StartCoroutine(GetUserPostKarma(json["data"]["children"][i]["data"]["author"].str));
string sourceURL = json["data"]["children"][i]["data"]["preview"]["images"][0]["source"]["url"].str;
sourceURL = sourceURL.Replace("&", "&");
yield return StartCoroutine(GrabImage(sourceURL));
Meme currentMeme = new Meme(
json["data"]["children"][i]["data"]["preview"]["images"][0]["source"]["url"].str,
authorPostKarma,
(int) json["data"]["children"][i]["data"]["score"].i,
json["data"]["children"][i]["data"]["permalink"].str,
json["data"]["children"][i]["data"]["title"].str,
currentBitmap
);
Debug.Log(currentMeme.cost);
memes[i] = currentMeme;
}
}
这是另一个脚本:
以下是另一段代码:
void Start ()
{
RedditCommunicator redditCommunicator = GetComponent<RedditCommunicator>();
redditCommunicator.GetNewMemes("me_irl", 1);
Meme[] memes = redditCommunicator.GetCurrentMemes();
Debug.Log(memes[0].currentScore);
redditCommunicator.SpawnOneMeme(memes[0]);
}
每个函数单独运行都没有问题,但是它们需要等待彼此完成,并按正确顺序运行才能正常工作。我希望这些函数保持分离,以便将来可以单独调用它们。
memes
是一个私有变量,我想将其传递给调用这些函数的其他脚本。如果您认为我已经通过谷歌和自学尽了最大努力,那么请相信我。非常感谢您的帮助。如果需要更多信息,请随时向我提问。目前代码的状态是在协程完成之前就返回了memes,导致memes为空。