學了幾天的coco2d-x引擎,現在總結一下:
AppDelegate類管理整個程序的生命週期。
在其中有這麼一段代碼:
// create a scene. it's an autorelease object
/*auto scene = HelloWorld::createScene();*/
SceneManger *manger = new SceneManger();//創建對象
manger->createLoadScene();//執行函數,具體看下面
//上述函數會創建一個場景,一個層,並將層加入到場景中
// run
director->runWithScene(manger->loadScene);
//loadScene爲類SceneManger的成員變量,是一個場景。
return true;
上述代碼的含義是創建一個場景,然後運行它。
void SceneManger::createLoadScene(){
loadScene = Scene::create();
LoadLayer *layer = LoadLayer::create();
layer->tsm = this;
loadScene->addChild(layer);
}
上述的代碼是創建一個場景,然後創建一個層,將層加入到場景中去,這裏的層是一個單獨的類。
class SceneManger
{
public:
Scene *loadScene;
Scene *openScene;
Scene *clockScene;
void createLoadScene();
void goOpenScene();
void goClockScene();
};
上述的代碼是場景管理器。
#pragma once
#include <iostream>
#include "cocos2d.h"
#include "SceneManger.h"
USING_NS_CC;
class LoadLayer :public Layer
{
public:
CREATE_FUNC(LoadLayer);
virtual bool init();
void onScheduleOnce(float dt);
public:
SceneManger *tsm;
};
上述的代碼是一個層的頭文件,要注意命名空間的聲明;在這裏可以在層中添加精靈,label之類的。要注意要繼承Layer層,並且LoadLayer *layer = LoadLayer::create();在場景管理器的這段代碼會在直接執行LoadLayer的init();
下面對一些代碼做出解釋:
SceneManger *manger = new SceneManger(); //創建場景管理器
director->runWithScene(manger->loadScene);//運行場景
loadScene = Scene::create();//創建場景
LoadLayer *layer = LoadLayer::create();//創建層
loadScene->addChild(layer);//將層加入到場景中
Size winSize = Director::getInstance()->getWinSize();//獲取窗口的大小
Label *label = Label::createWithTTF("Loading......", "fonts/Marker Felt.ttf", 32);//創建一個標籤
label->setPosition(Vec2(winSize.width / 2, winSize.height /2));//設置位置 Vec2代表二維
scheduleOnce(CC_SCHEDULE_SELECTOR(LoadLayer::onScheduleOnce),2.0);//2秒後調用函數一次
auto *chnStrings =
Dictionary::createWithContentsOfFile("string.xml");
//解析xml
const char *str1 = ((String*)chnStrings->objectForKey("back"))->getCString();//獲取值
MenuItemLabel * menuItem = MenuItemLabel::create(Label::createWithSystemFont(str1, "", 30), CC_CALLBACK_1(clockLayer::menuCallBack, this));
//創建一個MenuItem
menuItem->setPosition(Vec2(winSize.width*0.9,winSize.height*0.9));
//設置位置
auto menu = Menu::create(menuItem,NULL);//創建菜單
menu->setPosition(Point::ZERO);//設置位置
this->addChild(menu);//添加
_background = Sprite::create("res/background.jpg");//創建一個精靈
_background->setScale(0.5);//設置精靈的比例
_hour->setAnchorPoint(Vec2(0.5, 0));//設置錨點
schedule(CC_SCHEDULE_SELECTOR(clockLayer::timeUpdate),1.0);//此函數可調用自定義函數 1s調用一次
_second->setRotation(sRotation);//設置精靈的旋轉角度
——second->getRotation();//得到精靈的旋轉角度
CREATE_FUNC(LoadLayer);
virtual bool init();
//cocos2d的宏函數 創建層
USING_NS_CC;//命名空間
MenuItemLabel *menuItem_2 = MenuItemLabel::create(Label::createWithSystemFont(str3, "", 30), CC_CALLBACK_1(OpenLayer::menuCallBack, this));
//創建菜單項
menuItem_2->setTag(102);//設置標籤
Director::getInstance()->replaceScene(clockScene);//切換場景
auto *chnStrings = Dictionary::createWithContentsOfFile("string.xml");
//通過xml文件中的key獲取value
const char *str1 = ((String*)chnStrings->objectForKey("string1"))->getCString();
const char *str2 = ((String*)chnStrings->objectForKey("string2"))->getCString();
const char *str3 = ((String*)chnStrings->objectForKey("string3"))->getCString();
//創建一個標籤顯示出來
Size winSize = Director::getInstance()->getWinSize();
Label *label = Label::create(str1,"Arial", 48);