ゲーム AI スクリプトを実行するためのファイバー システムを実装していますが、小さな問題が発生しました。
スクリプトで x フレームの待機を示すために yield return x を使用しています。他のイベントが待機するフレーム数を変更できるため、x フレームを計算するロジックをカプセル化したかったのです。私の理想的な解決策は、次のようなものです。
public Boolean removeScript = false;
public IEnumerable update()
{
while(true)
{
shootAtPlayer()
wait(30)
}
}
private IEnumerable wait(int x)
{
yield return removeScript ? -1 : x;
}
wait() は、return 30 を生成するように指示するか、スクリプトが不要になった場合は -1 を返します。イテレータは、スクリプトを削除して -1 の戻り値を処理します。x > 0 の場合、イテレータはフレームごとに return を 0 になるまでデクリメントし、update() を再度呼び出します。
ただし、当然のことながら、wait() からの yield 戻り値は update メソッドに伝達されないため、これは機能しません。これにより、コードが重複し、モジュール性が低下し、コードが読みにくくなります。
public IEnumerable update()
{
while(true)
{
shootAtPlayer()
yield return removeScript ? -1 : x;
}
}
これを構造化するためのより良い方法があるかどうか疑問に思っていましたか? または、この場合に役立つ、欠けている言語機能はありますか?