Ich bin der Autor von TreeSharp, wenn ihr irgendwelche Fragen haben, fühlen sich frei, mir eine E-Mail, um zu schießen (sein in jeder Quelldatei im Header enthalten ist).
Sie müssen zuerst die Konzepte von Verhaltensbäumen verstehen (die Unterschiede zwischen Selektoren, Sequenzen, Dekoratoren, Aktionen und Ähnlichem). Ich biete auch ein paar "Vanity" -Composites an, um die Dinge etwas leichter zu machen (wie Warten).
Die Konstruktor-basierte API kann Sie Bäume vollständig über ctors (mit dem Einsatz von Delegierten, die zur Laufzeit ausgewertet werden Entscheidungen zur Verfügung zu stellen, usw.) definieren
leider nie Ich habe um die „TreeExecutor“ Klasse zur Umsetzung, die Ausführung eines willkürlichen Verhaltenszweigs von etwas wie einer Tick() - Methode handhabt. Der einfachste Weg (mit einem PrioritySelector in diesem Beispiel, aber Sie können eine beliebige Composite verwenden) ist wie folgt;
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;
}
}
Leider hängt es wirklich davon ab, wofür Sie es verwenden. (Da es so generisch ist, ist es schwierig, Beispiele zu geben, die für ein gegebenes Projekt sinnvoll sind. Ich habe es von Sachen zur KI-Logik, zu Workflows, bis hin zu Planungsprozessen verwendet)
Ein kleines Beispiel, das helfen kann ein bisschen;
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))
)
)
)
);
}
Auch dies hängt wirklich von Ihren Anforderungen ab. Mit der Bibliothek können Sie alle Komposite untergliedern, um die Verwendung von Kompositen einfacher zu machen. (ZB; Sie können eine SetTargetAndRotate-Aktion erstellen, die die zwei Aktionen innerhalb der Sequenz eliminiert)
Nochmals, wenn Sie Fragen haben, zögern Sie nicht zu fragen.
es klingt wie Sie sich entschieden, mit Treesharp nach Wahl zu gehen, nicht, dass Sie es verwenden müssen.Für mich würde ich in einem solchen Fall etwas populäreres verwenden, für das Sie Codebeispiele finden würden. – BeemerGuy
das problem ist ... auf der suche nach etwas populärer ... ich konnte wirklich nichts finden. Haben Sie irgendwelche anderen C# -Bibliotheken für Verhaltensweisen erstellt oder solche, die beim Erstellen eines robusten Verhaltensbaums verwendet werden könnten? das war der einzige, den ich finden konnte – Jason
Irgendwelche Ideen? Könnte jemand aushelfen? – Jason