COCOS学習ノート--Cocosプロジェクトプロジェクトはどのように運営されていますか?


Cocosエンジンを使用する多くの開発者は、このような問題を考えたことがありますか.私たちが作成したCocosプロジェクトはどのように実行されていますか.その工事の入り口はどこにあるのだろうか.
では、まず私たちのプロジェクトディレクトリの構造を見てみましょう.
プロジェクトをリリースすると、プロジェクトファイルディレクトリの下にClassesサブディレクトリが表示されます.Classesは、ユーザーが自分で書いたC++ファイルを格納するために使用されます.プロジェクトを作成するときに生成されるクラスAppDelegateも含まれています.h、AppDelegate.cppとHelloWorldScene.h、HelloWorldScene.cpp.Classesディレクトリの下のソースファイルはすべての6つのプラットフォームで共通のコードファイルであり、androidでもiosでもこのディレクトリの下のソースファイルを使用し、本当にプラットフォームにまたがる部分に属するコードである.
win 32ディレクトリの下のソースファイルにはmainメインエントリファイルがあり、win 32プラットフォームの下でゲームの呼び出しを担当しています.実は対応するproj.Androidのプロジェクトにもandroidプラットフォームに対応するmainメインエントリファイルがありますが、プラットフォームによって実現コードが異なりますが、目的は同じです.
また、プロジェクトディレクトリの下にはリソースファイルを格納するResourcesサブディレクトリがあり、そのディレクトリの下にresファイルにMainSceneがあります.csbファイル、これは私たちがプロジェクトをパブリッシュするときに生成したバイナリファイルで、主にCocoStudioが編集したシーンファイルを保存し、このファイルを通じて私たちが編集したシーンを表示します.
 
プロジェクトの実行は主にClassesディレクトリの下のAppDelegate、HelloWorldSceneの2つのクラスを見ます.
 
まずAppDelegateを見てみましょう.cppクラス:
class  AppDelegate : private cocos2d::Application
{
public:
    AppDelegate();
    virtual ~AppDelegate();
 
    virtual void initGLContextAttrs();
    virtual bool applicationDidFinishLaunching();
    virtual void applicationDidEnterBackground();
    virtual void applicationWillEnterForeground();
};

AppDelegateクラスには、構造、構造関数のほかに、主に4つの方法があります.
//   OpenGL context   ,           
void AppDelegate::initGLContextAttrs()
{
    //  6   :red,green,blue,alpha,depth,stencil
    GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};
    GLView::setGLContextAttrs(glContextAttrs);
}
//          ,        
//           scene(  )
//             loading  
//         
bool AppDelegate::applicationDidFinishLaunching() {
	//    director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::createWithRect("HaHaHa", Rect(0, 0, 960, 640));
        director->setOpenGLView(glview);
    }
    director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);
    //               
    //             ,                   
    //               
    director->setDisplayStats(true);
    //     ,    60   
    director->setAnimationInterval(1.0 / 60);
 
    FileUtils::getInstance()->addSearchPath("res");
    //     HelloWorld scene.          
    auto scene = HelloWorld::createScene();
    //   director  HelloWorld scene
    //                  
    director->runWithScene(scene);
    return true;
}
//                
//         android   home  
//                    
void AppDelegate::applicationDidEnterBackground() 
{
    Director::getInstance()->stopAnimation();
}
 
 
//                  
//                    
void AppDelegate::applicationWillEnterForeground() 
{
    Director::getInstance()->startAnimation();
}
 
  
  
 

接下来看类HelloWorld

HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    CREATE_FUNC(HelloWorld);
};

ここでは、HelloWorldクラスはLayerクラスから継承されているので、HelloWorldオブジェクトはLayerオブジェクトです.このクラスには、次の3つの方法があります.
1.AppDelegateで使用するシーンメソッドcreateScene()を作成します.
2.Layerのinitメソッドを再ロードし、それ自体を初期化する.
3..マクロ関数CREATE_FNCはHelloWorldのcreate()メソッドを作成しました.
//      
Scene* HelloWorld::createScene()
{
    //            
    auto scene = Scene::create();
   //           
    auto layer = HelloWorld::create();
     //          
    scene->addChild(layer);
   //         
    return scene;
}
//       
bool HelloWorld::init()
{
    //         
    if ( !Layer::init() )
    { //           false
        return false;
    }
     //MainScene.csb              
     //                   
    auto rootNode = CSLoader::createNode("MainScene.csb");
     // CocoStudio         HelloWorld layer     
    addChild(rootNode);
 
    return true;
}

では、最後にまとめます.
1.ゲームの実行はAppDelegateクラスのアプリケーションDidFinishLaunching()メソッドのdirector->runWithScene(scene)によって行われます.
2.runWithScene(scene)のこのパラメータsceneはHelloWorldクラスのcreateScene()メソッドが返すSceneタイプのシーンオブジェクトである.
3.しかし、HelloWorldクラス自体はSceneタイプではなくLayerタイプであり、createScene()メソッドでHelloWorldオブジェクトとSceneシーンオブジェクトを作成し、HelloWorldオブジェクトをSceneオブジェクトに追加し、Sceneオブジェクトを返します.
4.HelloWorldオブジェクトは、Layerタイプのcreate()メソッドによって作成され、create()メソッドはマクロ関数CREATE_FNC定義;
5.MainScene.csbファイルはCocoStudioで編集したシーン情報を保存し、HelloWorldオブジェクトのinit()メソッドでコードCSLoader::createNode("MainScene.csb")でこのバイナリファイルをロードしてHelloWorldオブジェクトに追加しました.
ここまでcocosのプロジェクトの工事はみんな熟知したはずで、もしどこか問題があれば伝言を歓迎して一緒に討論を交流します!