脚本语言为c++

Scripting Language for C++

本文关键字:c++ 语言 脚本      更新时间:2023-09-26

我有使用脚本语言的需求,但是我有一个可怕的需求列表。我们的工作站(PS2 Linux)不允许我们拥有管理员权限,而且GCC的版本也很旧)。

谁能推荐一种脚本语言…

  • Linux
  • gcc 2.95.2:
  • 不需要admin访问
  • 易于与c++集成
  • 不需要额外的库
  • 没有提升(这对大学的网络驱动器来说太大了,我已经抱怨过很多次了,但他们觉得1g适合所有学生,无论计算机课程还是护理课程。)

脚本将为游戏对象做少量的逻辑。

Luabind将是我的第一选择,但boost使它不可能,并且由于工作站一直重置,我将不得不重新安装所有内容:(

我想推荐Angelscript:

http://www.angelcode.com/angelscript/

它很容易与c++集成,并且具有线程和所有功能。示例集成:

r = engine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL); assert( r >= 0 );

你再容易不过了。类具有相同的语法,但是是asMETHOD而不是asFUNCTION。它还支持导出类,拥有工厂,并附带一些预置,如字符串和数学。这门语言本身是c++、Java和Python的混合体,但非常好。

试一试,一旦我知道如何使用它,我就爱上了它。

我尝试过的脚本语言没有像Angelscript这样容易集成。我尝试了很多,比如Python, LUA, Javascript等等。

编辑:一些代码从我的程序,显示一个类的集成为您:

// Registering the interface to 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));
    // Behaviour: Factory and Refs
    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));
}

只用Lua,不要用他们的机器。如果必须,请将完整的开发环境和依赖项保存在闪存驱动器上。Lua是这方面的行业标准。