在运行时环境中使用C++ w Lua。

问题描述 投票:0回答:2

我已经把这个问题查了很多遍,以至于我确信在把LUA集成到我的C++游戏引擎中时,我错过了一个巨大的难题。我想做的是运行我的游戏引擎,然后当它运行时,我想点击我的用户界面,点击 "添加脚本",然后运行脚本。这一部分很容易做到,但我不明白的是,一个看似与lua_dofile一起运行的脚本,怎么会有获取鼠标输入或根据输入移动角色的代码。我不知道如何有效地做到这一点。我是应该让lua状态每一帧都被创建和销毁,还是让脚本每一帧都开火?在这样的应用程序中。

void init();

void update();
void render();

void end();

我如何使用LUA来控制一个实体的移动呢?

假设我设置了lua状态,所以你可以写这样的lua代码。


entity1 = Entity.new()
entity1:setPosition(4,5)

我如何给脚本提供一些来自鼠标的输入 让实体移动到鼠标的位置?

我的首要问题是,什么是让脚本控制我的实体的最佳方式,如果我向lua状态提供移动我的实体的能力,那么脚本家就可以写一个 "游戏"(即一个交互式的运行时应用程序)。

c++ lua game-engine game-development
2个回答
1
投票

举个具体的例子,假设你想在玩家点击鼠标时传送一个球给他们。下面是你可以用Lua写的例子。

local function clickHandler(event)
    local x, y, z = event.player:getCoords()
    local ball = event.world:getBall()
    ball:teleportTo(x, y, z)
end

game.registerEventHandler('click', clickHandler)

为了让这个例子在你的引擎中实际运行,你需要做的是:

  • 创建一个... registerEventHandler 将给定的回调保存在C可以访问的地方的函数。
  • 创建一个 getCoords 函数,返回给定玩家的坐标。
  • 创建一个 getBall 函数,在你的游戏世界中获取一个球。
  • 创建一个 teleportTo 将实体传送到指定地点的方法
  • 每当有玩家点击鼠标时,运行所有的 click 您保存的事件处理程序,用 event 对象,包含玩家和游戏世界

而对于这个问题特别是。

我是应该让LUA状态在每一帧都被创建和销毁 还是让脚本在每一帧都开火?

不,你要在每一帧中创建一个 lua_State 当你的游戏开始时,加载其中的脚本,然后继续使用该状态来调用事件处理程序。


0
投票

本质上,Lua脚本定义了在每个事件中被调用的函数,所以主机C++加载脚本,然后进入它的主循环,并调用Lua。所以主机C++加载脚本,然后进入它的主循环,回调Lua。

看看如何 LÖVE 确实如此。

© www.soinside.com 2019 - 2024. All rights reserved.