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

2018-08-27 15:23 更新

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

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

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


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

win下vs2013

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


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

HelloCrossApp下的Classes目錄

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


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

什么是CAWindow?

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

什么是CAViewController?

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

我們?cè)谶@里詳細(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.
    */
     
    /*
    這個(gè)函數(shù)用于實(shí)現(xiàn)CAApplication和CAWindow(CCScene應(yīng)該為注釋的錯(cuò)誤,以后版本會(huì)修正)的初始化
    如果返回true,初始化成功,程序正常運(yùn)行
    如果返回false,初始化失敗,程序終止運(yùn)行
    */
     
    virtual bool applicationDidFinishLaunching();
    
    /*
    @brief  The function be called when the application enter background
    @param  the pointer of the application
    */
     
    /*
    當(dāng)程序進(jìn)入后臺(tái)運(yùn)行時(shí),此函數(shù)會(huì)被調(diào)用(例如,電話)
    */
     
    virtual void applicationDidEnterBackground();
     
    /*
    @brief  The function be called when the application enter foreground
    @param  the pointer of the application
    */
     
    /*
    當(dāng)程序從后臺(tái)切回被激活時(shí)調(diào)用此函數(shù)
    */
     
    virtual void applicationWillEnterForeground();
};
#endif // _APP_DELEGATE_H_


我們?cè)賮砜纯碅pplication.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
     
    //啟動(dòng) 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()
{
    //暫停動(dòng)畫
    CAApplication::getApplication()->stopAnimation();
     
    // if you use SimpleAudioEngine, it must be pause
     
    //暫停音效,如果你有使用音效,希望程序切到后臺(tái)音效停止,請(qǐng)解下面代碼的注釋
    
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
 
// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground()
{
    //回復(fù)動(dòng)畫
    CAApplication::getApplication()->startAnimation();
     
    // if you use SimpleAudioEngine, it must resume here
     
    //回復(fù)音效,如果你有使用音效,希望程序切到激活狀態(tài)音效恢復(fù),請(qǐng)解下面代碼的注釋
    
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

RootWindow比較簡(jiǎn)單,我這里就不想詳述,我來看一看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的值縮放后會(huì)被改變)
    imageView->setFrame(winRect);
     
    //將圖片添加的到屏幕上面(如果不添加,那么這個(gè)ui將不會(huì)被渲染,內(nèi)存也會(huì)在下一個(gè)loop時(shí)被釋放)
    this->getView()->addSubview(imageView);
     
    //設(shè)置一個(gè)文本
    CALabel* label = CALabel::createWithCenter(DRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
     
    //文本水平方向中間對(duì)其
    label->setTextAlignment(CATextAlignmentCenter);
      
    //文本豎直方向中間對(duì)其
    label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
     
    //設(shè)置字體大小(CROSSAPP_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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)