因此,我希望能够在脚本语言中修改已经实例化的C++对象。我一直在研究使用LuaBind的Lua和使用SWIG或Boost::Python的Python,但我看到的只是如何创建对象的新实例,但我想修改已经存在的实例。示例:
C++:
Player playerOne = new Player();脚本语言:
playerOne.Transform.x += 5;这是可能的吗?如果可能,你会建议用什么语言/库来实现这一点?
发布于 2012-04-06 23:58:41
在我的主项目中,我们使用LuaBind,它工作得很好。我们基本上是按照你的要求去做的。我们有现有的C++对象,我们希望以各种方式扩展行为,但在C++代码中对对象本身的行为进行这些更改将会有大量的工作和风险。
所以在你的例子中,你至少需要两个C++包装类--一个代表‘游戏’,允许你写一个函数返回玩家,一个包装你可以返回给lua的C++ player类。每个包装器函数都有api函数/属性,这些api函数/属性处理内部包装的单个对象,lua可以调用这些对象并将值传递给这些对象。以下是一篇文章的链接,该文章给出了使用LuaBind的非常简单的示例以及它的外观:
http://blog.nuclex-games.com/tutorials/cxx/luabind-introduction/
发布于 2012-11-28 13:01:24
我最近也需要做同样的事情。我也考虑过(并使用了) Boost.Python,但就我个人而言(就像我喜欢Boost一样),我觉得为了得到一个特性而拖累一半的Boost库有点言过其实。
因此,如果您感兴趣,我最近实现了一个非常轻量级的Python包装库,称为ECS:Python。Python (使用Python编写嵌入式C++脚本)是专门为希望将C++应用程序中的对象公开到嵌入式Python解释器以进行交互式脚本编写的C++开发人员设计的。
它的免费和开源:http://sourceforge.net/projects/ecspython
发布于 2012-04-06 02:33:32
没有任何机制可以将值从宿主语言魔术化为脚本语言。如果您希望在脚本语言中可以访问特定的对象实例,则必须通过某些函数将其提供给脚本语言。
这与任何其他正确封装的C++类型没有什么不同。如果对象A创建并存储了某个实例T,那么对象B获取它的唯一方法就是在A上调用一个返回T的函数。
https://stackoverflow.com/questions/10033335
复制相似问题