2012-10-01 2 views
-1

저는 C++ 게임 엔진에 Lua 스크립팅 엔진을 구현하고 있으며 Lua 스크립트를 저장하고 실행하는 가장 좋은 방법이 무엇인지 궁금합니다. 각자 자신의 스크립트를 할당 할 수있는 많은 장면 노드가 있습니다. lauL_dofile (...) 특정 스크립트의 모든 프레임을 실행 가능한 옵션으로 호출하고 있습니까? 아니면 더 좋은 방법이 있습니까? 예를 들어 이미 구문 분석 된 스크립트를 저장하는 방법이 있습니까? 나는 을보고 있었다. luaL_loadfilelua_pcall. 내가 처음에는 스크립트를로드하고 필요할 때 두 번째 스크립트를 호출 할 것이라고 생각했지만 lua_pcall은 매개 변수로 고유 ID를 가지지 않는 것 같습니다. 그래서 어떤 스크립트를 실행해야하는지 어떻게 알 수 있습니까?스크립트 저장

+0

일반적으로 초기화하는 동안'luaL_loadfile'을 호출하고, 실행 중에 유용하면'lua_pcall'을 호출하려고합니다. –

+0

하지만 어떤 스크립트를 호출해야하는지 어떻게 알 수 있습니까? lua_pcall의 어떤 매개 변수가 어떤 스크립트가 실행되어야하는지 나타냅니다. – SMart

+1

-1 : 답변을 "참조 읽기"로 요약 할 수 있으므로 질문에 -1 여부를 스스로 결정했습니다. 처음에는 문서가 약간 혼란 스러울 수 있으므로 결정하지 않았습니다. 그런 다음, [lua_call'에 대한 문서] (http://www.lua.org/manual/5.1/manual.html#lua_call)에는 루아처럼 정확하게 호출을 실행하는 방법에 대한 본격적인 예가 있다는 것을 알았습니다. 따라서 문서의 obtuseness는이 경우 변명의 여지가 없습니다. –

답변

1

루아 API를 사용하려면 루아 스택에 익숙해 져야합니다. 그리고 당신이 배울 수있는 가장 중요한 것들 중 하나는 the Lua API docs.을 읽는 법을 이해하는 것입니다. 모든 함수에 대해 스택에 정확히 어떻게 영향을 미치는지에 대한 표기법이 오른쪽에 있습니다 (스택을 전혀 수정하지 않는 경우).

luaL_loadfile은 파일을로드하고 그 파일을 스택에 Lua 함수로 푸시합니다. lua_pcall은 스택에서 함수를 실행합니다. 그러나 그것이 어떻게 작동하는지에 대한 많은주의 사항이 있습니다.

루아를 통해 함수를 호출하는 방법은 스택 측면에서 간단합니다. 호출하려는 기능을 푸시합니다. 그런 다음 모든 인수를 순서대로 처음부터 끝까지 푸시합니다. 그런 다음 그 기능에 대한 전화를 겁니다. lua_pcall은 이러한 방식으로 작동합니다. 즉, 실행할 함수의 위치는 이고 항상 스택의 맨 위를 기준으로nargs + 1입니다. 여기서 nargs은 함수에 전달할 인수의 수입니다. lua_pcall(모든 인수와 함께) 스택에서 기능을 팝업 것

참고. 파일을 방금로드 한 경우 이것은 이며 루아에서이 기능에 대한 참조입니다. 따라서 파일을 다시 실행할 수 없습니다. lua_pushvalue to copy it을 사용하여 인수를 스택에 푸시하기 전에 함수를 복제해야합니다. LUA_REGISTRYINDEX 테이블이나 다른 테이블에 막대기를 붙여야 값이 유지됩니다.

+0

설명서를 읽는 것이 도움이되었을 것 같은데 (한 번 읽었을 것입니다.) 아마 몇 번만 지나면 아마도, 아마도 당신의 대답은 제가 더 자세히 살펴야 할 모든 정보를 담고있었습니다. 감사. – SMart

0

내가 댓글을 달았을 때 초기화 시간에 보통 luaL_loadfile이라고 부릅니다. 로드 된 파일은 일반적으로 Lua 함수로 일부 [전역] 이름을 정의하거나 일부 전역 테이블의 일부 슬롯을 채 웁니다. lua 5.2 documentation은 그 중 하나를 호출하는 방법의 예 (§4 lua_call)를 제공합니다. 루아 스택에 적절한 것들을 밀어 넣어 응용 프로그램의 적절한 위치에서 그러한 호출을합니다 (아마도 lua_pcall 또는 lua_call을 사용합니다).

관련 문제