学了几天的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);