Lua执行被阻止

时间:2019-03-16 00:33:36

标签: c++ lua binding scripting

我正在尝试使用Lua在每帧中运行一个函数(绑定到我的C ++代码中)。

使用此代码,一切都可以正常工作(每帧调用一次,正确记录日志):

Script.lua(OnUpdate函数)

function InputTest:OnUpdate(deltaTime)
    self.x = self.x + deltaTime

    if Inputs.GetKey(KEY_LEFT_SHIFT) then speed = 3 else speed = 1 end
    if Inputs.GetKey(KEY_D) then self.x = self.x - deltaTime * speed end
    if Inputs.GetKey(KEY_A) then self.x = self.x + deltaTime * speed end
    if Inputs.GetKey(KEY_S) then self.z = self.z - deltaTime * speed end
    if Inputs.GetKey(KEY_W) then self.z = self.z + deltaTime * speed end
    if Inputs.GetKey(KEY_E) then self.y = self.y + deltaTime * speed end
    if Inputs.GetKey(KEY_Q) then self.y = self.y - deltaTime * speed end

    if Inputs.IsMousePressed(MOUSE_BUTTON_LEFT) then self:LogMousePosition() end

    Debug.Log(self.x)
end

但是当我添加test = self.owner:GetTransform()

Debug.Log(self.x)行之前

然后,函数OnUpdate在第二次调用后在添加的行处停止(控制台中仅显示一条调试行,但是添加的行之前的内容仍按预期工作)。

从Lua成功调用了C ++方法“ GetTransform”(一个简单的断点确认了这一点),并将“所有者”发送到GetTransform(感谢“:”)。所有者的内存地址每帧都是相同的,但仍只运行一次。

演员绑定实现

int OvCore::Scripting::Bindings::LuaActor::GetTransform(lua_State * L)
{
    if (EasyLua::IsUserdata(1))
    {
        ECS::Actor* instance = static_cast<ECS::Actor*>(EasyLua::ToUserData(1));
        EasyLua::PushNativeUserdataAsMetatable<ECS::Components::CTransform>(*instance->GetComponent<ECS::Components::CTransform>());
        return 1;
    }

    return 0;
}

PushNativeUserdataAsMetatable实现

template<typename T>
inline void EasyLua::PushNativeUserdataAsMetatable(T& p_userdata)
{
    EasyLua::PushNativeUserdata(static_cast<void*>(&p_userdata));
    EasyLua::PushLuaTypeMetaTable<T>();
    EasyLua::MoveToMetatable(-2);
}

有什么办法可以使本地调用首先成功,然后每隔一次失败?我错过了什么吗?

0 个答案:

没有答案