Pull to refresh

Comments 2

Вопрос: а как получить результат работы скрипта в C++-коде?
Пример: вызовем функцию concat с двумя параметрами и получим результат в C++:

os->getGlobal("concat");    // добавляем в стек глобальную функцию concat
os->pushNull();             // добавляем this для функции concat
os->pushNumber(5);          // первый параметр для concat
os->pushString(" big differences"); // второй параметр для concat
os->call(2, 1);             // вызываем функцию concat с 2 параметрами, затребуем 1 результат
OS::String res = os->popString(); // сохраним результат в виде строки и уберем его из стека

OS API реализует целый ряд функций для преобразования значений в стеке в простые типы, например, toFloat, toDouble, toInt, toString, toUserdata, popFloat, popBool и т.д.

Пример функции, которую я использую для преобразования объекта {x=10 y=20} в стеке по смещению offs в b2Vec2 (это из интеграции с Box2d):

static b2Vec2 to(OS * os, int offs)
{
	if(os->isObject(offs)){
		os->getProperty(offs, "x"); // required
		float x = os->popNumber();
	
		os->getProperty(offs, "y"); // required
		float y = os->popNumber();

		return b2Vec2(x, y);
	}
	os->triggerError(OS_E_ERROR, "point expected");
	return b2Vec2(0, 0);
}
Sign up to leave a comment.

Articles