cocos2d-x基本知识点(1)
2014-09-09 18:13
218 查看
一、CCDirector:
(1)、CCDirector类在游戏初始化的应用:
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector *pDirector = CCDirector::sharedDirector(); //获得导演类
pDirector->setOpenGLView(&CCEGLView::sharedOpenGlView()); //设置OpenGL视图
pDirector->setDisplayStats(true); //设置是否显示每帧时间
pDirector->setAnimationInterval(1.0/60); //设置每帧时间
CCScene *pScene = HelloWorld::sccene(); //创建场景
pDirector->runWithScene(pScene); //运行场景
return true;
}
(2)、游戏进入后台或由后台返回时导演类的工作:
void AppDelegate::applicationDidEnterBackground(){
CCDirector::sharedDirector()->stropAnimation();
}
void AppDelegate::applicationWillEnterForground(){
CCDirector::sharedDirector()->startAnimation();
}
(3)、导演类的结束方法:
void HelloWorld::menuCloseCallback(CCObject* pSender){
CCDirector::sharedDirector()->end();
#if(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
二、CCScene:
(1)、HelloWorld新建场景类实例:
CCScene* HelloWorld::scene(){
CCScene* scene = CCScene::create(); // 新建场景类实例
HelloWorld* layer = HelloWorld::create(); //定义布景层
scene->addChild(layer);
return scene;
}
(2)、获得并运行场景:
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector* pDirector = CCDirector::sharedDirector();// 初始化导演类
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView()); //设置OpenGL视图
pDirector->setDisplayStats(true); //设置是否显示每帧时间
pDIrector->setAnimationInterval(1.0/60); // 设置每帧时间
CCScene *pScene = HelloWorld::scene(); // 创建场景
pDirecotr->runWIthScene(pScene); // 运行场景
return true;
}
(3)、场景的切换:
1)调用CCDirector::sharedDirector()->purgeCachedData()清空缓存
2)新建场景
3)调用CCDirector::sharedDirector()->replaceScene(this)替换新场景
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0/60);
CCScene* pScene = CCScene::create();
CCLayer* pLayer = new TestController();
pLayer->autorelease();
pScene->addChild(pLayer);
pDirector->runWithScene(pScene);
return true;
}
// 切换场景这个事件应该是在按下主菜单上的按键后发生的.menuCallback在定义布景层时定义:
void TestController::menuCallback(CCObject* pSender){
CCMenuItem* pMenuItem = (CCMenuItem*)(pSender);
int nIdx = pMenuItem->getZOrder() - 10000;
TestScene* pScene = CreateTestScene(nIdx);
if(pScene){
pScene->runThisTest();
pScene->release();
}
}
static TestScene* CreateTestScene(int nIdx){
CCDirector::sharedDirector()->purgeCachedData(); // 清空缓存
TestScene* pScene = NULL;
switch(nIdx){
case TEST_ACTION_MANAGER:
pScene = new ActionMangerTestScene();
break;
......
default:
break;
}
return pScene;
}
class ActionManagerTestScene : public TestScene{
public:
virtual void runThisTest();
};
void ActionMangerTestScene::runThisTest(){
CCLayer* pLayer = nextActionMangerAction();
addChild(pLayer);
CCDirector::sharedDirector()->replaceScene(this);
}
(4)、切换场景动画的使用步骤:
1)新建场景
2)根据需要的新建场景的切换动画选择CCTransitionScene子类,通过create将之前建的场景传入其中,并设置其他参数。
3)调用CCDirector::sharedDirector()->replaceScene(弟2步中定义的CCTransitionScene的子类)替换场景。
三、CCLayer:
(1)、CCLayer类的init函数在创建布景层时被调用:
bool HelloWorld::init(){
if(!CCLayer::init()){
return false;
}
CCMenuItemImage* pCloseItem = CCMenuItemImage::create("CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback)
);
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width-20,20));
CCMenu* pMenu = CCMenu::create(pCloseItem,NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu,1);
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World","Arial",24);
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition(ccp(size.width/2,size.height-50));
this->addChild(pLabel,1);
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
pSprite->setPosition(ccp(size.width/2,size.height/2));
this->addChild(pSprite,0);
return true;
}
四、CCLayerColor:
(1)、CCLayerColor类的定义初始化:
void LayerTest1::onEnter(){
LayerTest::onEnter();
setTouchEnabled(true);
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLayerColor* layer = CCLayerColor::create(ccc4(0xFF,0x00,0x80),200,200);//ARGB值,宽,高
layer->ignoreAnchorPointForPosition(false);
layer->setPosition(CCPointMake(s.width/2,s.height/2));
addChild(layer,1,kTagLayer);
}
(2)、修改颜色布景层的大小:
void LayerTest1::updateSize(CCPoint &touchLocation){
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCSize newSize = CCSizeMake(fabs(touchLocation.x-s.width/2)*2,fabs(touchLocation.y-s.height/2)*2);
CCLayerColor* lc = (CCLayerColor*)getChildByTag(kTagLayer); // 设置颜色布景层的大小
lc->setContentSize(newSize);
}
(3)、使用setBlendFunc(让布景层的颜色产生渐变效果)的示例:
// 传入的参数是一个有起始效果和结束效果的参数
void LayerTestBlend::newBlend(float dt){
CCLayerColor *layer = (CCLayerColor*)getChildByTag(kTagLayer);
GLenum src;
Glenum dst;
if(layer->getBlendFunc().dst == GL_ZERO){
src = GL_SRC_ALPHA;
dat = GL_ONE_MINUS_SRC_ALPHA;
}
else{
src = GL_ONE_MINUS_DST_COLOR;
dst = GL_ZERO;
}
ccBlendFunc bf = {src,dst};
layer->setBlendFunc(bf);
}
五、多层布景层类CCLayerMultiplex:
有时候UI有很多页面,在页面中用的图也并不是很多,不需要使用切换场景,只需把不同页面做成不同的布景层,
然后切换布景层。这就需要一个"管理者"来管理这些页面,这时候就要用到CCLayerMultiplex类。
(1)、CCLayerMultiplex类的定义初始化:
void MenuTestScene::runThisTest(){
CCLayer* pLayer1 = new MenuLayerMainMenu();
CCLayer* pLayer2 = new MenuLayer2();
CCLayer* pLayer3 = new MenuLayer3();
CCLayer* pLayer4 = new MenuLayer4();
CCLayer* pLayer5 = new MenuLayerPriorityTest();
CCLayerMultiplex* layer = CCLayerMutiplex::create(pLayer1,pLayer2,pLayer3,pLayer4,pLayer5,NULL);
addChild(layer,0);
pLayer1->release();
pLayer2->release();
pLayer3->release();
pLayer4>release();
pLayer5->release();
CCDirector::sharedDirector()->replaceScene(this);
}
(2)、切换布景层的switchTo函数使用方法:
void MenuLayerPriorityTest::menuCallback(CCObject* pSender){
((CCLayerMultiplex*)m_pParent)->switchTo(0);
}
(1)、CCDirector类在游戏初始化的应用:
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector *pDirector = CCDirector::sharedDirector(); //获得导演类
pDirector->setOpenGLView(&CCEGLView::sharedOpenGlView()); //设置OpenGL视图
pDirector->setDisplayStats(true); //设置是否显示每帧时间
pDirector->setAnimationInterval(1.0/60); //设置每帧时间
CCScene *pScene = HelloWorld::sccene(); //创建场景
pDirector->runWithScene(pScene); //运行场景
return true;
}
(2)、游戏进入后台或由后台返回时导演类的工作:
void AppDelegate::applicationDidEnterBackground(){
CCDirector::sharedDirector()->stropAnimation();
}
void AppDelegate::applicationWillEnterForground(){
CCDirector::sharedDirector()->startAnimation();
}
(3)、导演类的结束方法:
void HelloWorld::menuCloseCallback(CCObject* pSender){
CCDirector::sharedDirector()->end();
#if(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
二、CCScene:
(1)、HelloWorld新建场景类实例:
CCScene* HelloWorld::scene(){
CCScene* scene = CCScene::create(); // 新建场景类实例
HelloWorld* layer = HelloWorld::create(); //定义布景层
scene->addChild(layer);
return scene;
}
(2)、获得并运行场景:
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector* pDirector = CCDirector::sharedDirector();// 初始化导演类
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView()); //设置OpenGL视图
pDirector->setDisplayStats(true); //设置是否显示每帧时间
pDIrector->setAnimationInterval(1.0/60); // 设置每帧时间
CCScene *pScene = HelloWorld::scene(); // 创建场景
pDirecotr->runWIthScene(pScene); // 运行场景
return true;
}
(3)、场景的切换:
1)调用CCDirector::sharedDirector()->purgeCachedData()清空缓存
2)新建场景
3)调用CCDirector::sharedDirector()->replaceScene(this)替换新场景
bool AppDelegate::applicationDidFinishLaunching(){
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0/60);
CCScene* pScene = CCScene::create();
CCLayer* pLayer = new TestController();
pLayer->autorelease();
pScene->addChild(pLayer);
pDirector->runWithScene(pScene);
return true;
}
// 切换场景这个事件应该是在按下主菜单上的按键后发生的.menuCallback在定义布景层时定义:
void TestController::menuCallback(CCObject* pSender){
CCMenuItem* pMenuItem = (CCMenuItem*)(pSender);
int nIdx = pMenuItem->getZOrder() - 10000;
TestScene* pScene = CreateTestScene(nIdx);
if(pScene){
pScene->runThisTest();
pScene->release();
}
}
static TestScene* CreateTestScene(int nIdx){
CCDirector::sharedDirector()->purgeCachedData(); // 清空缓存
TestScene* pScene = NULL;
switch(nIdx){
case TEST_ACTION_MANAGER:
pScene = new ActionMangerTestScene();
break;
......
default:
break;
}
return pScene;
}
class ActionManagerTestScene : public TestScene{
public:
virtual void runThisTest();
};
void ActionMangerTestScene::runThisTest(){
CCLayer* pLayer = nextActionMangerAction();
addChild(pLayer);
CCDirector::sharedDirector()->replaceScene(this);
}
(4)、切换场景动画的使用步骤:
1)新建场景
2)根据需要的新建场景的切换动画选择CCTransitionScene子类,通过create将之前建的场景传入其中,并设置其他参数。
3)调用CCDirector::sharedDirector()->replaceScene(弟2步中定义的CCTransitionScene的子类)替换场景。
三、CCLayer:
(1)、CCLayer类的init函数在创建布景层时被调用:
bool HelloWorld::init(){
if(!CCLayer::init()){
return false;
}
CCMenuItemImage* pCloseItem = CCMenuItemImage::create("CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback)
);
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width-20,20));
CCMenu* pMenu = CCMenu::create(pCloseItem,NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu,1);
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World","Arial",24);
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition(ccp(size.width/2,size.height-50));
this->addChild(pLabel,1);
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
pSprite->setPosition(ccp(size.width/2,size.height/2));
this->addChild(pSprite,0);
return true;
}
四、CCLayerColor:
(1)、CCLayerColor类的定义初始化:
void LayerTest1::onEnter(){
LayerTest::onEnter();
setTouchEnabled(true);
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCLayerColor* layer = CCLayerColor::create(ccc4(0xFF,0x00,0x80),200,200);//ARGB值,宽,高
layer->ignoreAnchorPointForPosition(false);
layer->setPosition(CCPointMake(s.width/2,s.height/2));
addChild(layer,1,kTagLayer);
}
(2)、修改颜色布景层的大小:
void LayerTest1::updateSize(CCPoint &touchLocation){
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCSize newSize = CCSizeMake(fabs(touchLocation.x-s.width/2)*2,fabs(touchLocation.y-s.height/2)*2);
CCLayerColor* lc = (CCLayerColor*)getChildByTag(kTagLayer); // 设置颜色布景层的大小
lc->setContentSize(newSize);
}
(3)、使用setBlendFunc(让布景层的颜色产生渐变效果)的示例:
// 传入的参数是一个有起始效果和结束效果的参数
void LayerTestBlend::newBlend(float dt){
CCLayerColor *layer = (CCLayerColor*)getChildByTag(kTagLayer);
GLenum src;
Glenum dst;
if(layer->getBlendFunc().dst == GL_ZERO){
src = GL_SRC_ALPHA;
dat = GL_ONE_MINUS_SRC_ALPHA;
}
else{
src = GL_ONE_MINUS_DST_COLOR;
dst = GL_ZERO;
}
ccBlendFunc bf = {src,dst};
layer->setBlendFunc(bf);
}
五、多层布景层类CCLayerMultiplex:
有时候UI有很多页面,在页面中用的图也并不是很多,不需要使用切换场景,只需把不同页面做成不同的布景层,
然后切换布景层。这就需要一个"管理者"来管理这些页面,这时候就要用到CCLayerMultiplex类。
(1)、CCLayerMultiplex类的定义初始化:
void MenuTestScene::runThisTest(){
CCLayer* pLayer1 = new MenuLayerMainMenu();
CCLayer* pLayer2 = new MenuLayer2();
CCLayer* pLayer3 = new MenuLayer3();
CCLayer* pLayer4 = new MenuLayer4();
CCLayer* pLayer5 = new MenuLayerPriorityTest();
CCLayerMultiplex* layer = CCLayerMutiplex::create(pLayer1,pLayer2,pLayer3,pLayer4,pLayer5,NULL);
addChild(layer,0);
pLayer1->release();
pLayer2->release();
pLayer3->release();
pLayer4>release();
pLayer5->release();
CCDirector::sharedDirector()->replaceScene(this);
}
(2)、切换布景层的switchTo函数使用方法:
void MenuLayerPriorityTest::menuCallback(CCObject* pSender){
((CCLayerMultiplex*)m_pParent)->switchTo(0);
}
相关文章推荐
- cocos2d-x基本知识点(6)---动作系列(上)
- cocos2d-x基本知识点(6)---动作系列(中)
- cocos2d-x基本知识点(5)
- cocos2d-x基本知识点:声音
- cocos2d-x基本知识点:事件处理机制之触屏事件2
- cocos2d-x基本知识点(3)
- cocos2d-x基本知识点(6)---动作系列(end)
- cocos2d-x基本知识点:游戏存档
- cocos2d-x基本知识点(2)
- cocos2d-x基本知识点(8):菜单项
- cocos2d-x基本知识点:网络连接libcurl
- cocos2d-x基本知识点(4)
- cocos2d-x基本知识点:粒子系统
- cocos2d-x基本知识点(7):动画
- cocos2d-x基本知识点:事件处理机制之加速度传感器事件
- cocos2d-x基本知识点:文本渲染
- cocos2d-x基本知识点:按键事件
- cocos2d-x基本知识点:事件处理机制之触屏事件1
- cocos2d-x基本知识点(6)---动作系列(下)
- PHP基础知识点简单回顾:变量、函数以及PHP基本格式