cocos2dx 첫 번째 체험
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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.