C++的脚本语言
2011-7-23 9:14:18
收藏:0
阅读:161
评论:2
我需要使用一个脚本语言,但是我的需求列表很糟糕。 大学的工作站(PS2 Linux)不允许我们拥有管理员访问权限,而且有一个非常旧的版本的 GCC)。
有人能推荐一个脚本语言吗,它需要...
- 在 Linux 上工作
- GCC 2.95.2 :(
- 不需要管理员权限
- 易于与 C++ 集成
- 不需要额外的库
- 没有 boost(在大学的网络驱动器上太大了,我已经多次抱怨过了,但他们认为 1GB 适合所有学生,无论是计算机课程还是护理课程。)
这些脚本将为游戏对象执行少量的逻辑。
Luabind 将是我的首选,但 boost 使其不可能,而且由于工作站经常重置,我必须重新安装所有东西 :(
原文链接 https://stackoverflow.com/questions/6799410
点赞
stackoverflow用户88888888
我想推荐 Angelscript:
http://www.angelcode.com/angelscript/
它与 C++ 集成非常容易,同时支持线程。示例集成代码如下:
r = engine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL); assert( r >= 0 );
你无法更简单了。类的语法与 C++ 相同,只是用 asMETHOD 代替 asFUNCTION。它还支持导出类、拥有工厂和一些预定义类型,例如字符串和数学运算。
该语言本身是 C++、Java 和 Python 的混合,但真的很出色。
尝试一下,学会使用它后我就迷上了。
我尝试过很多脚本语言,例如 Python、LUA 和 Javascript,但没有一种像 Angelscript 这样轻松易集成。
编辑:下面是我的一些程序代码,展示了一个类的集成示例:
// 注册 Angelscript 接口
void NLBoundingBox::registerWithAngelScript( asIScriptEngine* e )
{
AS_ERR_CHECK(e->RegisterObjectType("NLBoundingBox", 0, asOBJ_REF));
AS_ERR_CHECK(e->RegisterObjectMethod("NLBoundingBox", "bool intersects(const NLBoundingBox@)", asMETHOD(NLBoundingBox, intersects), asCALL_THISCALL));
AS_ERR_CHECK(e->RegisterObjectMethod("NLBoundingBox", "bool isPointInside(f32 x, f32 y)", asMETHODPR(NLBoundingBox, isPointInside, (f32,f32), bool), asCALL_THISCALL));
AS_ERR_CHECK(e->RegisterObjectMethod("NLBoundingBox", "void translate(f32 x, f32 y)", asMETHODPR(NLBoundingBox, translate, (f32,f32), void), asCALL_THISCALL));
AS_ERR_CHECK(e->RegisterObjectMethod("NLBoundingBox", "void translateTo(f32 x, f32 y)", asMETHODPR(NLBoundingBox, translateTo, (f32,f32), void), asCALL_THISCALL));
AS_ERR_CHECK(e->RegisterObjectMethod("NLBoundingBox", "void rotateAroundCenter(f32 angle)", asMETHOD(NLBoundingBox, rotateAroundCenter), asCALL_THISCALL));
// 行为:工厂和引用计数
AS_ERR_CHECK(e->RegisterObjectBehaviour("NLBoundingBox", asBEHAVE_FACTORY, "NLBoundingBox@ NLBoundingBox()", asFUNCTIONPR(factory, (void), NLBoundingBox*), asCALL_STDCALL));
AS_ERR_CHECK(e->RegisterObjectBehaviour("NLBoundingBox", asBEHAVE_RELEASE, "void NLBoundingBox()", asMETHOD(NLBoundingBox, release), asCALL_THISCALL));
AS_ERR_CHECK(e->RegisterObjectBehaviour("NLBoundingBox", asBEHAVE_ADDREF, "void NLBoundingBox()", asMETHOD(NLBoundingBox, addRef), asCALL_THISCALL));
}
2011-07-23 09:53:18
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
只用 Lua,并且不要使用他们的机器。如果必须,把你完整的开发环境和依赖项都放在闪存盘上。他们行业标准就是 Lua。