Cocos2dx3.2rc+cocosstudio學習日記(2)

今天主要總結一下,Cocos2DX的入口,以及對cocostudio創建的UI調用,控件調用。

1.Cocos2DX的入口:

在新建了一個Cocos2Dx工程以後,在VS中會發現這麼一個源文件:AppDelegate.cpp

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLView::create("My Game");
        director->setOpenGLView(glview);
    }

    // turn on display FPS
    director->setDisplayStats(false);

    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);

    // create a scene. it's an autorelease object
	auto scene = GameScene::scene();

    // run
    director->runWithScene(scene);

    return true;
}


這個就是工程的入口,這裏需要注意幾個比較重要的類,第一個就是Director導演類:

Director是一個共享的的對象,主要負責不同場景間的控制:判斷活躍場景;改變場景;替換場景等

主要的方法有:

runWithScene(Scene* scene):這個用作啓動第一個場景,一般只會用一次,一般也就用在入口函數中;

replaceScene(Scene* scene):切換場景,用一個新場景替換當前場景,當前場景被釋放;

pushScene(Scene* scene):切換場景,當前場景被掛起到場景堆棧中,然後再切換到下一個場景;

void popScene():顧名思義,與pushScene配合使用,回到上一個場景;

void popToRootScene:同上,回到根場景;

2.Scene類:

上面提到了場景,場景在cocos2DX中如何理解?這裏就需要對下面三個類進行一定的瞭解:

Node類

Scene類

Layer類

簡單來說,Node就是父親,Scene和Layer全部是在這個Node上面,Scene負責和Director打交道,一個Scene可以加載多個Layer。

大概是這麼一個具體過程:Scene加載多個Layer,然後Director加載一個Scene進行顯示。

3.如何調用Cocostudio的UI:

這裏用下面的代碼來進行說明【這是一段GameScene類的源文件,下面是初始化,初始化完成後調用Scene方法】:

 GameScene

bool GameScene::init()  //初始化 
{
	//GameLayer *gamelayer = GameLayer::node();


	//////////////////////////////
	// 1. super init first
	if (!Scene::init())
	{
		return false;
	}



	/////////////////////////////
	// 2. add your codes below...

	//調用cocosstudio的UI,注意Layout
	//層調用UI,這個界面場景調用層
	

	auto _uiLayer = Scene::create();
	auto _widget = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("UI001_1.ExportJson"));
	_uiLayer->addChild(_widget);  
	this->addChild(_uiLayer);

	//初始UI界面中含的控件,通過調用的widget來進行獲取
	//FirstChangeLoading爲具體的相應事件
	Button* BUTTON001 = (Button*)Helper::seekWidgetByName(_widget, "Button_12");
	BUTTON001->addTouchEventListener(this, toucheventselector(GameScene::FirstChangeLoading));
	
	//進入下一個函數進行其他調用

	return true;
}<strong>
</strong>

可見,具體可以分爲這樣一個過程:

1.初始化判斷:

super init first

2.創建對象:

<span style="font-size:18px;"><span style="font-size: 18px;">auto _uiScene = Scene::create();</span></span><pre name="code" class="cpp" style="font-size: 18px;">auto _uiLayer = Layer::create();


<span style="font-size:18px;"></span>

3.創建連接:

auto _widget = dynamic_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("UI001_1.ExportJson"));
4.進行連接:

_uiLayer->addChild(_widget);  
this->addChild(_uiLayer);
5.獲取當前UI的控件

6.調用函數

7.return true


通過上面幾部,就可以調用使用Cocostudio創建的UI了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章