현재 SqPlus를 쓰고 있는데, 파일 여러개를 쓰고있습니다. 방법은
http://wiki.squirrel-lang.org/default.aspx/SquirrelWiki/MultiVMs.html
근데, 사용하다가 SqPlus::GetInstance()가 계속 말썽을 부리네요.
한번은 제대로 값을 받아오는데, 똑같은 파일에 똑같은 스크립트인데, 두번이상에서는 반드시
값이 NULL이라서 에러가 나네요. 혹시 참고할만한 것 있나요?
On 10월14일, 오후9시33분, Farts <chaja...@gmail.com> wrote:
> 안녕하세요.
>
> 현재 SqPlus를 쓰고 있는데, 파일 여러개를 쓰고있습니다. 방법은http://wiki.squirrel-lang.org/default.aspx/SquirrelWiki/MultiVMs.html
Update부분에 옛날 것을 복원 안했던게 문제였던듯...
혹시 멀티 버츄얼 쓸 때 도움되는 팁이라도 있나요?
> > 값이 NULL이라서 에러가 나네요. 혹시 참고할만한 것 있나요?- 따온 텍스트 숨기기 -
>
> - 따온 텍스트 보기 -
class MyVector
{
public:
float m_fX;
float m_fY;
float m_fZ;
};
DECLARE_INSTANCE_TYPE(MyVector);
int Add(HSQUIRRELVM v)
{
MyVector* pSelf = GetInstance<MyVector,true>(v, 1);
MyVector* pArg = GetInstance<MyVector,true>(v, 2);
MyVector kResult;
kResult.m_fX = pSelf->m_fX + pArg->m_fX;
kResult.m_fY = pSelf->m_fY + pArg->m_fY;
kResult.m_fZ = pSelf->m_fZ + pArg->m_fZ;
return ReturnCopy(v, kResult);
}
int main()
{
SquirrelVM::Init();
SquirrelVMSys kVMSys1;
SquirrelVM::GetVMSys(kVMSys1);
SqPlus::SQClassDef<MyVector>(_T("MyVector"))
.var(&MyVector::m_fX,_T("x"))
.var(&MyVector::m_fY,_T("y"))
.var(&MyVector::m_fZ,_T("z"))
.staticFuncVarArgs(&Add, _T("Add"));
SquirrelVM::Init();
SquirrelVMSys kVMSys2;
SquirrelVM::GetVMSys(kVMSys2);
SqPlus::SQClassDef<MyVector>(_T("MyVector"))
.var(&MyVector::m_fX,_T("x"))
.var(&MyVector::m_fY,_T("y"))
.var(&MyVector::m_fZ,_T("z"))
.staticFuncVarArgs(&Add, _T("Add"));
try
{
SquirrelVM::SetVMSys(kVMSys1);
SquirrelObject kTest1 = SquirrelVM::CompileScript((const SQChar
*)"test.nut");
SquirrelVM::RunScript(kTest1);
}
catch(SquirrelError & e)
{
scprintf(_T("Error: %s\n"),e.desc);
}
try
{
SquirrelVM::SetVMSys(kVMSys2);
SquirrelObject kTest2 = SquirrelVM::CompileScript((const SQChar
*)"test.nut");
SquirrelVM::RunScript(kTest2);
}
catch(SquirrelError & e)
{
scprintf(_T("Error: %s\n"),e.desc);
}
SquirrelVM::SetVMSys(kVMSys1);
SquirrelVM::Shutdown();
SquirrelVM::SetVMSys(kVMSys2);
SquirrelVM::Shutdown();
return 0;
}
---------- test.nut ----------------
local Vec1 = MyVector();
local Vec2 = MyVector();
Vec1.x = 1;
Vec1.y = 2;
Vec1.z = 3;
Vec2.x = 1;
Vec2.y = 2;
Vec2.z = 3;
local Vec3 = Vec1.Add(Vec2);
제가 아직 Squirrel에 익숙하지가 않아서... 지금 하고 있는 프로젝트에 D3DXVECTOR3하고 D3DXMATRIX를 스
크립트에서 쓸 수 있게 하고 있는데, 코드가 정리되는대로 올릴 생각입니다. (물론, 저보다 더 잘하시는 분들이 많으셔셔 도움이
될진 모르겠지만... orz...)
저기에 제가 하고 있는 방식은...
CObject::Update( float fElapsed )
{
SquirrelVMSys pOld;
SquirrelVM::GetVMSys( pOld );
{
SquirrelVM::SetVMSys( m_pScriptVM );
.
.
.
}
SquirrelVM::SetVMSys( pOld );
}
이런식으로, 매 함수마다 예전 포인터를 저장하고, 복원하고 있습니다. 이렇게 해야 런타임이 나지 않더라고요.
이 부분에 왠지 귀찮아서... ㅎㅎ
> > > - 따온 텍스트 보기 -- 따온 텍스트 숨기기 -