我正在制作一个游戏,在游戏中使用Lua编写自己的机器人。我使用名为NLua的C#Lua库,它基本上像官方C库一样工作。每行运行Lua脚本行
如果用户输入下面的代码:
for i=0,10 do -- Repeat 10 times
if (robot:check_clear(0.1)) then -- Check if clear up to 10cm in front
robot:go_foward(0.1) -- Go foward 10cm
else then
robot:turn_right(45) -- Turn 45 degrees
end
end
我希望它运行整个代码10倍,你可以看到。它将继续检查robot:check_clear(),假设它返回false。所以它现在将运行机器人:turn_right(45)并等待该动作完成,因为旋转可能需要3秒左右。与go_forward(0.1)一样。在继续之前,我该如何等待?
现在我用lua.DoString(code);
来执行所有的代码。问题在于,在继续之前,它不会等待。
机器人在代码中指的是一个C#类,我称之为LRobot。它是这样分配的lua["robot"] = new LRobot();
我对Lua和Lua C/C#库有点新意,所以我会很感谢你的详细解答。我不想让别人为我编写代码,只想知道关键命令以及如何构造它们。
在此先感谢!
一种选择是将有机器人类的命令不直到执行命令为止。 (否则,名称可能会更像'go_forward_async')。 –
我会怎么做,而不冻结整个线程? –
这不就是你所说的“等”吗?冻结用户的Lua“执行线程”? –