从 C 访问 Lua 协程

我已经实现了一个协程系统。当我按 ENTER 清除第一个文本框时,它调用 contscript(),然后调用 lua_resume(),但它不会继续执行协程。

那么我需要传递什么参数给 lua_resume() 来使协程继续执行呢?

static lua_State *lua;

static int luapanic(lua_State *L)
{
        allegro_exit();
        const char *err = lua_tostring(L, -1);
        DEBUGF("lua panic: %s\n", err);
        printf("lua panic: %s\n", err);
        return 0;
}

static int textbox(lua_State *L)
{
        const char *str = luaL_checkstring(L, 1);

        message(str);
        return 1;
}

void contscript(void)
{
        lua_resume(lua,NULL,0);
}

static int transfer_player(lua_State *L)
{
        int x, y;
        SpriteObj *p;

        x = luaL_checkint(L, 1);
        y = luaL_checkint(L, 2);

        p = findobject(0);
        setposition(p,x,y);
        scrollToAndCentre(x,y);
        return 1;
}

bool initscript(void)
{
        lua = luaL_newstate();
        lua_atpanic(lua, luapanic);

        luaL_openlibs(lua);
        lua_register(lua, "textbox", textbox);
        lua_register(lua, "transfer_player", transfer_player);
        return true;
}

以下是相关的脚本:

local co = coroutine.wrap(
        function()
                textbox("亲爱的我!我从来不知道鸟儿能唱得如此动听!")
                coroutine.yield()
                textbox("文本消息 #2")
        end
)

co()
点赞