DebugNode.h
#ifndef __DEBUG_NODE_H__
#define __DEBUG_NODE_H__
#include "cocos2d.h"
USING_NS_CC;
class DebugNode : public Node {
public:
  DebugNode();
  virtual ~DebugNode();
  CREATE_FUNC(DebugNode);
public:
  virtual bool init();
  void apply(const std::string &script);
private:
  std::string m_script;
};
#endif
DebugNode.cpp
#include#include #include "DebugNode.h" DebugNode::DebugNode() { m_script = ""; } DebugNode::~DebugNode() { stopAllActions(); } bool DebugNode::init() { Node::init(); return true; } void DebugNode::apply(const std::string &script) { m_script = script; LuaEngine *luaEngine = LuaEngine::getInstance(); ScriptEngineManager::getInstance()->setScriptEngine(luaEngine); auto L = luaEngine->getLuaStack()->getLuaState(); // DebugNode의 부모 Node를 루아 스크립트 전역 변수 rootNode로 지정한다. luaEngine->getLuaStack()->pushObject(getParent(), "cc.Node"); lua_setglobal(L, "rootNode"); // 지정된 스크립트 파일을 실행한다. luaEngine->executeScriptFile(m_script.c_str()); // 이후 1초 마다 스트립트를 재실행한다. auto action = RepeatForever::create( Sequence::createWithTwoActions( DelayTime::create(1.0f), CallFunc::create( [&]() { LuaEngine::getInstance()->reload(m_script.c_str()); }))); runAction(action); } 
제어할 Scene 노드의 자식으로 DebugNode 객체를 생성해서 추가하고 apply 함수를 호출하면 1초에 한 번씩 지정된 Lua 스트립트 파일을 실행하는데 제어할 Scene 자식 노드는 setName 함수를 사용하여 유일한 이름을 지정해 주어야 한다. 다음의 샘플은 Cocos2d-x에 포함된 cpp-empty-test 프로젝트에 DebugNode를 적용한 부분의 코드 조각이다.
HelloWorldScene.cpp
bool HelloWorld::init()
{
  (생략)
    
  /////////////////////////////
  // 3. add your codes below...
  // add a label shows "Hello World"
  // create and initialize a label
    
  auto label = LabelTTF::create("Hello World", "Arial", TITLE_FONT_SIZE);
  // 스크립트에서 참조할 이름을 지정한다.
  label->setName("label");
    
  (생략)
  auto debugNode = DebugNode::create();
  this->addChild(debugNode);
  debugNode->apply("HelloWorldScene.lua");
    
  return true;
}
HelloWorldScene.lua
label = rootNode:getChildByName("label")
label:setPosition(100, 200)
HelloWorldScene.lua 파일을 텍스트 에디터에서 열고 setPosition의 인자를 변경한 후에 저장하면 바로 위치 값이 적용되는 것을 확인할 수 있다.
댓글 없음:
댓글 쓰기