Я боровся з тим, як реалізувати сценарії в своєму ігровому двигуні. У мене є лише кілька вимог: це повинно бути інтуїтивно зрозумілим, я не хочу писати власну мову, аналізатор та інтерпретатор, і я не хочу використовувати нитки. (Я впевнений, що тут є більш просте рішення; мені не потрібні клопоти з декількома логічними потоками гри.) Ось приклад сценарію в 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
це виклик блокування, який повертається, коли вона доходить до Боба, то моя гра застряє, бо блокує ту саму нитку виконання, яка змусила б Алісу йти.
Я розглядав, як кожна функція викликає дію - alice.walk_to(bob)
підштовхне об'єкт до черги, яка вискочить після того, як Еліс дістається до Боба, де б не була. Це більш тонко зламано: if
гілка оцінюється негайно, тому Боб може привітати Алісу, навіть якщо його спина повернена до неї.
Як інші двигуни / люди обробляють сценарій, не створюючи нитки? Я починаю шукати ідеї в неігрових областях, як анімаційні ланцюги jQuery. Здається, що для подібних проблем повинні бути деякі хороші зразки.