【发布时间】:2015-12-21 22:21:00
【问题描述】:
我在我的 C++ 游戏中使用 Lua 作为脚本。我希望能够将脚本附加到实体,并根据脚本中定义的函数注册回调,以便在适当的时间运行脚本函数。
我相信我可以通过将“脚本”制作成表格来封装不同的脚本。基本上,... lua source code ... 会变成ScriptName = { ... lua source code ... }。然后我不会调用func(),而是调用ScriptName.func(),因此定义相同函数(也就是注册相同事件)的两个脚本不会互相践踏。
我现在的问题是封装共享相同脚本的不同实体。显然我不希望它们共享变量,但是就我现在所做的而言,脚本定义的任何变量都将由该脚本的每个实例共享,这真的很糟糕。我可以在源代码级别尝试类似于我的上述解决方案的方法,方法是在编译之前用EntityID.ScriptName = { ... } 包装每个脚本。有人告诉我有更好的方法,但我不知道。
另一个因素是脚本需要能够引用与特定实体相关的实体和脚本/组件。如果我使用上述方法,最好的解决方案是将实体 ID 作为可以引用特定于该实体的表的字符串传递,我认为?在这一点上,我真的不知道自己在做什么。
【问题讨论】:
-
也许切换到更多的对象概念,换句话说代码可以与实例重用?我在“智力练习”之后从“脚本”概念切换到 Groovy 平台中的对象表示法。语言不同,问题相似(抱歉,没有英文拼写)
标签: c++ lua entity game-engine