游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2915|回复: 6

自制lua封装示例

[复制链接]

6

主题

95

帖子

103

积分

注册会员

Rank: 2

积分
103
发表于 2005-12-5 18:47:00 | 显示全部楼层 |阅读模式
class Domain:拥有lua_State* 一个.
class Object:一个任意类型全局变量(number,string,table,function...)
Cpp:
    Domain d;
    d.LoadFile("Test.lua");
    int the_number = 10;
    wrap(the_number) = d["the_table"][13];//若出错抛出异常
    cout<<the_number<<endl;

    d["the_table"][13] = 666;
    the_number = 0;

    Object o(d["the_table"]["int_fun"]);
    int a = 7;
    wraps(a)(the_number) = o(a);
    cout<<a<<" "<<the_number<<endl;
输出:
777
49 343

Test.lua:

the_number = 53;
the_table = {}
the_table[13] = 777
the_table.int_fun = function (n)
return n * n,n * n * n
end

自认接口简洁,有兴趣者顶一下.顺便告诉我您认为较好的封装有哪些(c++ only)

4

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
QQ
发表于 2005-12-6 10:33:00 | 显示全部楼层

Re:自制lua封装示例

luabind

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2005-12-6 12:06:00 | 显示全部楼层

Re:自制lua封装示例

luabind是好用,
就是编译时太耗时了......

6

主题

95

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2005-12-8 23:41:00 | 显示全部楼层

Re:自制lua封装示例

我没准备添加在lua中使用C++类的功能,故本设计极为轻巧.我觉得脚本作者不该使用C++类,而应由C++程序员解析不依赖宿主语言的lua脚本.

4

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
QQ
发表于 2005-12-10 16:20:00 | 显示全部楼层

Re: Re:自制lua封装示例

ACGFan: Re:自制lua封装示例

我没准备添加在lua中使用C++类的功能,故本设计极为轻巧.我觉得脚本作者不该使用C++类,而应由C++程序员解析不依赖宿主语言的lua脚本.

那脚本的作用就本末倒置了。
[em1]

6

主题

95

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2005-12-24 16:33:00 | 显示全部楼层

Re:自制lua封装示例

不该用"解析",该说"调用"
从游戏框架上说,应是脚本被CallBack吧.
故我觉得不会本末倒置.

7

主题

82

帖子

110

积分

注册会员

Rank: 2

积分
110
QQ
发表于 2005-12-26 21:56:00 | 显示全部楼层

Re:自制lua封装示例


参考下wow的脚本实现

xml中定义了某个事件发生时回调的lua函数名
lua中要实现某些游戏功能则通过调用C程序暴露出来的接口完成

如tooltip的一段xml代码:
<!-- Main Frame -->
        <Frame name="TooltipsKhaosFrame" parent="UIParent" hidden="false">
                <Scripts>
                        <OnEvent>
                                TooltipsKhaos_OnEvent();
                        </OnEvent>
                        <OnLoad>
                                TooltipsKhaos_OnLoad();
                        </OnLoad>
                </Scripts>
        </Frame>


lua中的一个函数:
--[[ Event Handler In Case Needed ]]--
function TooltipsKhaos_OnEvent()
        if (event == "UPDATE_MOUSEOVER_UNIT") then
                TooltipsFunctions.GameTooltip_SetUnit(GameTooltip,"mouseover");
        end
end

调用c接口的代码:
local playerGuild = GetGuildInfo(&quotlayer");


另外wow客户端中暴露给lua的接口都是采用的类似纯C接口的形式,想实现这样的接口,直接使用lua的原生c api足够了,如果想实现一些复杂点的lua oo编程,luabind是个不错的选择
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 02:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表