2010-11-15 90 views
0

我目前正在編寫XNA中的RPG引擎。引擎執行一系列腳本命令,但必須阻塞,直到下一個腳本命令。我怎樣才能做到這一點?XNA中的阻塞函數

例如:

// interact with an NPC named in String 'Name' 
String interactfunc = String.Format("{0}_Interact", Name); 
System.Reflection.MethodInfo info = Factory.Script.GetType().GetMethod(interactfunc); 
if (info != null) info.Invoke(Factory.Script, new object[]{this}); 

//this may run the following script command for NPC 'Bob' 

    public void Bob_Interact(NPC Bob) 
    { 
     Bob.Say("Well this worked."); 
     Bob.Say("Didnt it?"); 
    } 

//the say command looks like this 

    public void Say(String Text) 
    { 
     TalkGui gui = new TalkGui(this, Text); 


     Factory.Game.Guis.Add(gui); 
     Factory.FocusedGui = gui; 

    } 

現在我需要劇本的等待,直到第TalkGui已運行下一個腳本命令之前被解僱。

這樣做的最好方法是什麼?也許可以在自己的線程中運行腳本函數?

回答

1

你不想爲這種事情使用線程。他們的體重太重了。

你真正想要的是co-routines。您可以使用yield和迭代器在C#中模擬它們。

有一些例子herehere。也許我的回答here也值得一讀。

C#5.0引入了一種更好的異步編程方式。 Here's a videohere is the CTP