Lua与C++:职责分离
请帮助分类组织 C++/Lua 游戏代码的方法并分离它们的职责。哪种方式最方便,你使用的是哪一个?
例如,Lua 可以仅用于初始化 C++ 对象,也可以在每个游戏循环迭代中使用。 它可以仅用于游戏逻辑,也可以用于图形。 有些游戏引擎提供了从脚本对所有子系统进行完全控制的功能! 我真的不喜欢这种方法(没有分离)。
将所有游戏对象(npc、位置)实现为 Lua 表格而不是 C++ 对象是一个好主意吗?还是最好将它们映射到(Lua 表格以控制 C++ 对象)?还是其他什么?
谢谢。
编辑。 我的分类:**Lua 和 C++: 职责分离**。
主题的继续:**Lua, 游戏状态和游戏循环**。
原文链接 https://stackoverflow.com/questions/2674462
我的方法是尽可能限制 Lua 可访问的内容。我从未发现过需要一个类似于“main”之类的函数,每次渲染场景(或更多时)都需要调用。一些 Lua 引擎(如 LOVE)确实会这样做。我更喜欢为常见事件定义具有可选回调函数的对象,例如碰撞、鼠标单击、进入或离开游戏世界等等。
最终结果是非常声明式的,几乎类似于对象的配置文件。我有一个用于创建类或对象类型的函数,另一个用于基于这些类型创建对象。然后,这些对象具有可以在响应各种事件时调用的一系列方法。所有这些 Lua 方法映射到 C / C++ 方法,反过来修改对象的私有属性。这里是一个捕捉球对象的桶对象的示例:
define {
name='ball';
texture=png('images/orb.png');
model='active';
shape='circle';
radius=16;
mass=1.0;
elastic=.7;
friction=.4;
}
define {
name='bucket';
model='active';
mass=1;
shape='rect';
width=60;
height=52;
texture=png('images/bucket.png');
elastic=.5;
friction=.4;
oncontact = function(self, data)
if data.subject:type() == 'ball' then
local a = data.subject:angleTo(self:getxy())
if a < 130 and a > 50 then
--update score etc..
end
end
end;
}
我不会将其视为实现脚本 API 的“唯一正确方法”。 Lua 的美妙之处之一就是它支持许多不同的 API 风格。这只是我发现适用于制作的游戏(2D 物理游戏)的方法。
我建议这样分类:
极端变种:Lua 脚本控制一切(游戏逻辑、图形、人工智能等)。更甚的是:脚本作为主程序,拥有游戏循环。一些引擎会这么做。最坏的情况:完全没有分工,也没有脚本安全性。
Lua 脚本维护游戏状态并处理游戏逻辑。可能在每个游戏循环迭代中都会被调用。
Lua 脚本很少用于初始化、配置、回调。主程序为脚本提供(绑定)极简接口。因此脚本是由这些精心设计和提供的模块构建而成。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
开始小型化。允许访问游戏实体,以便执行特定于地图 / 关卡的脚本。跨地图 / 关卡保持一致的行为可能不需要编写脚本。
此外,只允许访问对象的公共接口。