ゲームエンジンにスクリプトを実装する方法に苦労しています。いくつかの要件があります。直感的である必要があり、カスタム言語、パーサー、インタープリターを記述したくない、スレッドを使用したくない、などです。(もっと簡単な解決策があると確信しています。複数のゲームロジックスレッドの面倒は必要ありません。)Pythonのスクリプトの例(別名擬似コード):
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
ストーリーテリングの壮大な部分は、実装の問題を引き起こします。walk_to
ゲームの時間がかかるため、メソッド全体を一度に評価することはできません。すぐに戻ると、アリスはボブに向かって歩き始め、(同じフレームで)挨拶(または挨拶)します。しかし、walk_to
Bobに到達したときに戻るブロッキングコールは、アリスが歩くのと同じ実行スレッドをブロックしているため、ゲームが停止します。
各機能をアクションにalice.walk_to(bob)
キューに入れることを検討しました- オブジェクトをキューにプッシュし、アリスがどこにいてもボブに到達した後にポップされます。それはもっと微妙に壊れています:if
ブランチはすぐに評価されるので、ボブがアリスに背を向けても挨拶するかもしれません。
他のエンジン/人は、スレッドを作成せずにスクリプトをどのように処理しますか?私は、jQueryアニメーションチェーンなど、ゲーム開発者以外の領域でアイデアを探し始めています。この種の問題にはいくつかの良いパターンがあるはずです。