2010-11-15 4 views
0

Je suis actuellement en train de coder un moteur RPG dans XNA. Le moteur exécute une série de commandes de script, mais doit se bloquer jusqu'à la prochaine commande de script. Comment puis-je faire ceci?Fonctions de blocage dans XNA

Par exemple:

// 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; 

    } 

Maintenant, je besoin du script l'attente jusqu'à ce que la première TalkGui a été rejetée avant d'exécuter la commande suivante du script.

Quelle est la meilleure façon de faire cela? Peut-être exécuter les fonctions de script dans leur propre thread ou quelque chose?

Répondre

1

Vous ne voulez pas utiliser de threads pour ce genre de chose. Ils sont beaucoup trop lourds.

Ce que vous voulez vraiment, ce sont des co-routines. Vous pouvez les émuler en C# en utilisant yield et les itérateurs. Il y a quelques exemples here et here. Et peut-être ma réponse here vaut la peine de lire aussi.

C# 5.0 introduit une manière beaucoup plus agréable de faire de la programmation asynchrone comme ceci. Here's a video et here is the CTP.