cocos2d-x基本知识点(1)

一、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);

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值