cocos2dx 첫 번째 체험

4189 단어
우리가 프로젝트를 창설한 후에 항상 자체로HelloWorld류를 가지고 있는데, 짧은 몇 줄의 코드가 게임의 모형을 만들어 냈는데, 우리가 정말 그것을 이해했습니까?만약 우리가 이 몇 줄의 코드를 좀 일찍 이해할 수 있다면, 우리는 아마 지금보다 더 멀리 갈 것이다.

HelloWorld 클래스 이해


HelloWorld에서 종료 단추를 빼면 다음 세 가지 함수만 있습니다.
          static cocos2d::Scene* createScene();
           virtual bool init(); 
           CREATE_FUNC(HelloWorld);//        

이 세 줄 코드는 반드시 철저하게 이해하고 다시 써야 한다.모든 게임 장면에 이 세 가지 함수가 필요하기 때문이다.
 
게임HelloWorld 장면을 만들 때 AppDelegate에 Helloworld::createScene(),
그것의 실현을 보십시오
    // 'scene' is an autorelease object
    auto scene = Scene::create();
   
    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();
 
    // add layer as a child to scene
    scene->addChild(layer);
 
    // return the scene
    return scene;

먼저 새로운 장면을 만들고 HelloWorld층을 create하여 새로 만든 장면에 추가한 다음에 이 장면을 AppDelegate에 되돌려줍니다.
한 장면의 창설과 전시는 이렇게 간단하지만HelloWorld에create가 없다는 것을 발견했습니까?그리고 init () 방법을 사용하지 않았습니까?HelloWorld에서 init 초기화를 사용하는 것을 본 적이 없습니다. 그러면 이것은 어디에서 호출된 것입니까?
여기 그때 한 블로거의 블로그를 보면서 한참을 이해했는데,
사실 Create에서...FUNC(MainScene);중, 당신은 CREATE 를 클릭FUNC는 F12를 눌러도 되고 정의를 향해 우클릭해도 됩니다.
다음과 같은 매크로 정의가 나타납니다
#defineCREATE_FUNC(__TYPE__) \
static __TYPE__*create() \
{ \
    __TYPE__ *pRet = new __TYPE__(); \
    if (pRet && pRet->init()) \
    { \
        pRet->autorelease(); \
        return pRet; \
    } \
    else \
    { \
        delete pRet; \
        pRet = NULL; \
        return NULL; \
    } \
}

매크로 정의 코드를 같은 줄에 놓으면 읽기가 불편하기 때문에 여기\줄을 바꿉니다
Create 를 보실 수 있습니다.FUNC 매크로는 새 객체를 new로 만들고 init() 작업을 수행할 수 있는 정적 구성원 함수를 정의합니다.
이렇게 하면 Helloworld 전체의 논리가 명확해진다.
외부 클래스 호출 static cocos2d:::Scene* createScene(),새 장면을 만듭니다.  CREATE_FUNC(HelloWorld);정적create 클래스 구성원 함수를 정의하고 이 함수에서virtual bool init () 를 호출합니다.이 장면을 초기화합니다. 
앞으로 우리가 새로운 장면을 만들 때마다 이 격식에 따라 하면 된다.자, 다음은 손을 대야겠다.
사실은 HelloWorld에 있어요.h에서 Helloworld를MainScene로 바꿉니다. 이것은 외부 클래스에서 함수를 호출하여 새로운 장면을 만들었습니다. 그러면 안 됩니다. 그렇죠? 우리는 이 장면을 초기화해야 합니다. 그러면 가상 bool init()를 호출해야 합니다.그럼 어떻게 호출하지? 앞서 언급한 CreateFUNC의 매크로 정의는 매크로 정의에서 호출됩니다.
그래서 여기 이 세 줄의 코드가 있는 것이 매우 중요하다.
이렇게 해서 우리는 게임 장면의 창설과 그 원리를 완전히 파악했다. 사실 더 중요한 것은 우리가 어떻게 배워야 하는지를 깨달았다는 것이다. 코코스2dx 엔진은 대량의 매크로 정의를 사용했기 때문에 우리는 표면적인 용법만 추구해서는 안 되고 매크로가 그런 것들을 실현한 것을 깊이 있게 배워야 한다.특히 뒷부분의 메모리 관리는 더욱 그렇다.
요약하고 다시 한 번 말하지만 모든 게임 장면의 기초는 이 세 마디 코드이다.
    static cocos2d::Scene* createScene();
    virtual bool init(); 
    CREATE_FUNC(HelloWorld);

좋은 웹페이지 즐겨찾기