我一直在努力在游戏引擎中实现脚本。我只有几个要求:应该是直观的,我不想编写自定义语言,解析器和解释器,并且我不想使用线程。(我确定有一个更简单的解决方案;我不需要多个游戏逻辑线程的麻烦。)这是一个示例示例,使用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走动的执行线程。
我考虑过让每个函数加入一个动作- alice.walk_to(bob)
将对象推入队列,无论爱丽丝到达鲍勃,无论他身在何处,该队列都会弹出。这更巧妙地被打破了:if
分支立即得到评估,因此鲍勃可能会向爱丽丝致意,即使他的背对着她。
其他引擎/人员如何在不创建线程的情况下处理脚本?我开始在非游戏开发领域中寻找想法,例如jQuery动画链。似乎应该有一些解决此类问题的好的模式。