Язык сценариев для C ++ - PullRequest
2 голосов
/ 23 июля 2011

Мне нужно использовать язык сценариев, но у меня ужасный список требований.Рабочие станции (PS2 Linux) в универе не позволяют нам иметь доступ администратора и имеют очень старую версию GCC).

Кто-нибудь может порекомендовать язык сценариев, который ...

  • Работа в Linux
  • GCC 2.95.2: (
  • Нет необходимости в административном доступе
  • Простота интеграции с C ++
  • Нет необходимости в дополнительных библиотеках
  • Нет повышения (это просто слишком много для сетевых накопителей в универе, я неоднократно жаловался, но они чувствуют, что их устраивает 1 гиг всех студентов, независимо от компьютерного курса или курса медсестер.)

Скрипты будут выполнять небольшое количество логики для игровых объектов.

Luabind будет моим первым выбором, но повышение делает это невозможным, и поскольку рабочие станции сбрасывают всевремя, я должен был бы переустановить все: (

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Я хочу порекомендовать Angelscript:

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

Это чертовски легко интегрировать с C ++ и имеет многопоточность и все. Пример интеграции:

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

Ты не можешь сделать это проще. Классы имеют такой же синтаксис, но как METHOD вместо asFUNCTION. Он также поддерживает экспорт классов, наличие фабрик и поставляется с некоторыми premades, такими как string и math. Сам язык представляет собой смесь C ++, Java и Python, но действительно хорош.

Попробуй, я влюбился в него, как только понял, как им пользоваться.

Ни один язык сценариев, который я пробовал, не был так легко интегрировать, как Angelscript. И я очень много пробовал, например, Python, LUA, Javascript и т. Д.

edit: Некоторый код из моей программы показывает интеграцию класса для вас:

// 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));
}
2 голосов
/ 23 июля 2011

Просто используйте Lua и не используйте их машины. Если необходимо, сохраните всю среду разработки и зависимости на флэш-диске. Lua буквально является отраслевым стандартом для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...