CrossApp項目結(jié)構(gòu)及入口

2018-08-27 15:23 更新

我創(chuàng)建一個名為HelloCrossApp的工程,那么在引擎的根目錄的projects文件夾下,將會出現(xiàn)一個名為HelloCrossApp的工程目錄。我們打開這個目錄可見下圖的的結(jié)構(gòu):

CrossApp項目結(jié)構(gòu)

HelloCrossApp的工程目錄結(jié)構(gòu)
Classes存放我們編寫的C++代碼
proj.android android平臺工程配置
proj.ios  ios平臺工程配置(需要在MacOS下使用xode)
proj.mac  mac平臺工程配置(需要在MacOS下使用xode)
proj.win32 win32平臺工程配置(用于在win下開發(fā),推薦vs2013)
Resources項目的資源目錄(存放:圖片、音效、字體等)


大家打開各自平臺使用的工程配置,我以win下vs2013為例子截圖

win下vs2013

工程配置結(jié)構(gòu)
HelloCrossApp我們自己的項目
libCocosDenshion聲音庫
libCrossAppCrossApp引擎庫
libExtensions使用的第三方的庫(json、sqlit3、network、websockets等)


打開HelloCrossApp下的Classes目錄,看到如下結(jié)構(gòu):

HelloCrossApp下的Classes目錄

Classes目錄結(jié)構(gòu)
AppDelegate 目入口
FirstViewController項目的CAViewController
RootWindow項目啟動的CAWindow


我在這里引用API給出的CAWindow和CAViewController解釋

什么是CAWindow?

CAWindow主要的作用是作為所有view的載體、容器,分發(fā)觸摸消息,協(xié)同viewController完成對應(yīng)用程序的管理。應(yīng)用程序通常只有一個window,即使存在多個window,也只能有一個window能夠接收屏幕事件。應(yīng)用程序啟動時創(chuàng)建這個窗口,并往窗口中加入一或多個視圖并顯示出來,之后我們很少需要再次引用它。CAWindow是所有CAView的根,管理和協(xié)調(diào)應(yīng)用程序的顯示。

什么是CAViewController?

CAViewController作為CAView的管理器,其最基本的功能就是控制視圖的切換。視圖控制器在MVC設(shè)計模式中扮演控制層(C)的角色, CAViewController的作用就是管理與之關(guān)聯(lián)的view,同時與其他CAViewController相互通信和協(xié)調(diào)。

我們在這里詳細(xì)講一下AppDelegate 的代碼,打開Application.h文件,我在代碼上標(biāo)注了中文的注釋,幫助大家理解。

#ifndef  _APP_DELEGATE_H_
#define  _APP_DELEGATE_H_
 
#include "CrossApp.h"
 
/**
@brief    The CrossApp Application.
The reason for implement as private inheritance is to hide some interface call by CAApplication.
*/
 
class  AppDelegate : private CrossApp::CCApplication
{
public:
    AppDelegate();
    virtual ~AppDelegate();
     
    /**
    @brief    Implement CAApplication and CCScene init code here.
    @return true    Initialize success, app continue.
    @return false   Initialize failed, app terminate.
    */
     
    /*
    這個函數(shù)用于實現(xiàn)CAApplication和CAWindow(CCScene應(yīng)該為注釋的錯誤,以后版本會修正)的初始化
    如果返回true,初始化成功,程序正常運行
    如果返回false,初始化失敗,程序終止運行
    */
     
    virtual bool applicationDidFinishLaunching();
    
    /*
    @brief  The function be called when the application enter background
    @param  the pointer of the application
    */
     
    /*
    當(dāng)程序進入后臺運行時,此函數(shù)會被調(diào)用(例如,電話)
    */
     
    virtual void applicationDidEnterBackground();
     
    /*
    @brief  The function be called when the application enter foreground
    @param  the pointer of the application
    */
     
    /*
    當(dāng)程序從后臺切回被激活時調(diào)用此函數(shù)
    */
     
    virtual void applicationWillEnterForeground();
};
#endif // _APP_DELEGATE_H_


我們再來看看Application.cpp里又都做了什么

#include "AppDelegate.h"
#include "RootWindow.h"
 
USING_NS_CC;
 
AppDelegate::AppDelegate()
{
}
 
AppDelegate::~AppDelegate() 
{
     
}
 
bool AppDelegate::applicationDidFinishLaunching()
{
    // initialize director
    //初始化direction
    CAApplication* pDirector = CAApplication::getApplication();
     
    //初始化窗口
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
    pDirector->setOpenGLView(pEGLView);
     
    // run
     
    //啟動 RootWindow入口
    pDirector->runWindow(RootWindow::create());
    return true;
}
 
// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground()
{
    //暫停動畫
    CAApplication::getApplication()->stopAnimation();
     
    // if you use SimpleAudioEngine, it must be pause
     
    //暫停音效,如果你有使用音效,希望程序切到后臺音效停止,請解下面代碼的注釋
    
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
 
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
    //回復(fù)動畫
    CAApplication::getApplication()->startAnimation();
     
    // if you use SimpleAudioEngine, it must resume here
     
    //回復(fù)音效,如果你有使用音效,希望程序切到激活狀態(tài)音效恢復(fù),請解下面代碼的注釋
    
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

RootWindow比較簡單,我這里就不想詳述,我來看一看FirstViewController都做了什么?
首先打開FirstViewController.h文件

//加載函數(shù) 一般做初始化UI和邏輯
void viewDidLoad();
//卸載函數(shù) 一般做移除和釋放
void viewDidUnload();

再來看看FirstViewController.cpp的 vievDidLoad();里的代碼:

void FirstViewController::viewDidLoad()
{
    // Do any additional setup after loading the view from its nib.
    DRect winRect = this->getView()->getBounds(); //獲得屏幕的Bounds(Bounds不收縮放影響)
     
    //加載一張圖片
    CAImageView* imageView = CAImageView::createWithImage(CAImage::create("HelloWorld.png"));
     
    //設(shè)置圖片的Frame顯示大小(Frame的值縮放后會被改變)
    imageView->setFrame(winRect);
     
    //將圖片添加的到屏幕上面(如果不添加,那么這個ui將不會被渲染,內(nèi)存也會在下一個loop時被釋放)
    this->getView()->addSubview(imageView);
     
    //設(shè)置一個文本
    CALabel* label = CALabel::createWithCenter(DRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
     
    //文本水平方向中間對其
    label->setTextAlignment(CATextAlignmentCenter);
      
    //文本豎直方向中間對其
    label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
     
    //設(shè)置字體大?。–ROSSAPP_ADPTATION_RATIO是用于適配的系數(shù))
    label->setFontSize(72 * CROSSAPP_ADPTATION_RATIO);
     
    //設(shè)置文本內(nèi)容
    label->setText("Hello World!");
     
    //設(shè)置文本顏色
    label->setColor(CAColor_white);
     
    //添加到屏幕并設(shè)置z軸
    this->getView()->insertSubview(label, 1);
}

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號