首先,英语不是我的母语,但我会尽我所能!
我实际上正在为一个学校项目开发一个C ++的炸弹人,我想学习Lua并用它来开发不同的AI。不幸的是,似乎没有人知道我学校的Lua编程,所以我正在使用互联网!
我已经看过Lua的样子了,我把它链接到一些C ++代码,以便在传递参数等时看到不同的行为......
我已经看到了不同的意见"为什么在人工智能开发中使用Lua很酷#34;
我已经看到很多关于如何在C ++中使用它的解释,但我仍然没有得到它。
例如,承认我有一个包含炸弹人地图的物体地图,以及一个会破坏这张地图上一些墙壁的物体怪物。 我想将Map传递给Lua代码,允许它改变它的内容吗?或者Lua文件不应该改变C ++对象中的任何内容?
我已经读过关于Luabind允许将一些对象从C ++传递给Lua的内容,但我不确定这是不是一个好主意。
关于Lua和C ++有一些更普遍的问题:
Lua如何意识到C ++值和内容的某些变化(例如,如果某些其他线程正在处理它)?
似乎当你从C ++向Lua传递一个参数时,它是重复的,有没有办法将指针传递给Lua,所以它总能看到变化的变量?
我认为,在游戏开始时,能够启动AI脚本并让它完成所有操作,之后不用C ++处理它,这真的可能吗?
答案 0 :(得分:0)
1。 Lua如何知道C ++值的一些变化?
这是通过所谓的绑定实现的。您可以使用Lua注册类以及可以从Lua调用的方法。
例如,你有一个C ++中的Monster类,并希望Lua处理它的行为。您可以在Lua中注册一个全局函数,它将被称为getMonsterIDsOnTheMap
。该函数将返回一个Lua表,其中包含在地图中生成的怪物ID。
接下来,您将注册一个名为getMonster
的函数,该函数会将特定怪物的实例返回给Lua。这是你进行绑定的地方,可以让你操纵Lua中的怪物。比如说,你的Monster类有函数move
,destroyWall
,getTilePosition
等等。要让Lua访问此Monster
实例,您需要一个userdata
对象。
在C ++中,您创建一个userdata,存储在指向Monster
实例的userdata指针中,并指定userdata Monster
metatable。在此metatable中,您可以注册函数move
,destroyWall
等。您可以通过存储在userdata中的指针使这些函数在Monster
的实例上运行。在分配元数据后,您只需将您的用户数据返回给Lua,在那里您可以操纵您的怪物。
这实际上也是对第二个问题的回答:
2。看起来当你从C ++向Lua传递一个参数时,它是重复的,有没有办法将指针传递给Lua,所以它总能看到变化的变量?
3。我认为,在游戏开始时,它能够启动AI脚本并让它完成所有操作,之后不用C ++处理它,这真的可能吗?
是的,有可能。您可以使用C ++(声音,图形等)编写核心功能,并让Lua通过绑定函数处理所有内容。当然,这可能不是一件容易的事,但这是可能的。
你的问题很广泛,所以我不能再具体了。如果你有疑问,请随便询问。