Je suis l'auteur de TreeSharp, si les gars vous avez des questions, ne hésitez pas à me tirer un email (son contenu dans chaque fichier source dans l'en-tête).
Vous devez d'abord comprendre les concepts des arbres de comportement (les différences entre sélecteurs, séquences, décorateurs, actions, etc.). Je fournis également quelques composites de "vanité" pour rendre les choses un peu plus faciles (comme Wait).
L'API à base de constructeur-vous permet de définir des arbres entièrement via cteurs (avec l'utilisation des délégués qui sont évalués lors de l'exécution de fournir des décisions, etc.)
Malheureusement, je ne ai jamais réussi à mettre en œuvre la classe « TreeExecutor », qui gère l'exécution d'une branche de comportement arbitraire à partir de quelque chose comme une méthode Tick(). Le moyen le plus simple (utiliser un PrioritySelector dans cet exemple, mais vous pouvez utiliser n'importe quel composite) est le suivant:
static void Start()
{
// Start MUST be called before you can tick the tree.
Logic.Start(null);
// do work to spool up a thread, or whatever to call Tick();
}
private static void Tick()
{
try
{
Logic.Tick(null);
// If the last status wasn't running, stop the tree, and restart it.
if (Logic.LastStatus != RunStatus.Running)
{
Logic.Stop(null);
Logic.Start(null);
}
}
catch (Exception e)
{
// Restart on any exception.
Logging.WriteException(e);
Logic.Stop(null);
Logic.Start(null);
throw;
}
}
Malheureusement, donner des "exemples" d'utilisation dépend vraiment de l'utilisation que vous en faites. (Puisqu'il est générique, il est difficile de donner des exemples qui auront un sens pour un projet donné.Je l'ai utilisé des choses à la logique AI, aux flux de travail, aux processus de planification)
Un petit exemple qui peut aider un peu;
static Composite CreateFireMissile()
{
return new PrioritySelector(
new Decorator(ret => CurrentShip.CurrentTarget != null,
new Action(ret => CurrentShip.CurrentTarget.FireMissile())),
new Decorator(ret => CurrentShip.CurrentTarget == null,
new Decorator(ret => CurrentShip.NearbyHostiles.Count > 0,
new Sequence(
new Action(ret => CurrentShip.SetTarget(CurrentShip.NearbyHostiles[0])),
new Action(ret => CurrentShip.RotateTo(CurrentShip.CurrentTarget.Location))
)
)
)
);
}
Encore une fois, cela dépend vraiment de vos besoins. La bibliothèque vous permettra de sous-classer tous les composites pour faciliter la réutilisation des composites. (Par exemple, vous pouvez créer une action SetTargetAndRotate, qui élimine les deux actions dans la séquence)
Encore une fois, si vous avez des questions, n'hésitez pas à demander.
on dirait que vous avez décidé d'aller avec Treesharp par choix, pas que vous deviez l'utiliser.Pour moi, dans un tel cas, j'irais avec quelque chose qui est plus populaire que vous trouveriez des exemples de code pour. – BeemerGuy
le problème est ... lors de la recherche de quelque chose de plus populaire ... je ne pouvais pas vraiment trouver quelque chose. Avez-vous affiché d'autres bibliothèques d'arbre de comportement C# ou autres qui pourraient être utilisées dans la construction d'un arbre de comportement robuste? c'était le seul que je pouvais trouver – Jason
Des idées? Quelqu'un pourrait-il aider? – Jason