当前位置:编程学习 > wap >>

cocos2d-x学习笔记(一)HelloCpp

main.cpp是win32平台的入口类,AppDelegate是应用真正的入口:
applicationDidFinishLaunching函数就是处理导演类和场景开始及资源的适配:
[cpp] 
bool AppDelegate::applicationDidFinishLaunching() {  
    // initialize director  
    CCDirector* pDirector = CCDirector::sharedDirector();  
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();  
  
    pDirector->setOpenGLView(pEGLView);  
  
    // Set the design resolution  
    pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);  
  
    CCSize frameSize = pEGLView->getFrameSize();  
  
    // In this demo, we select resource according to the frame's height.  
    // If the resource size is different from design resolution size, you need to set contentScaleFactor.  
    // We use the ratio of resource's height to the height of design resolution,  
    // this can make sure that the resource's height could fit for the height of design resolution.  
  
    // if the frame's height is larger than the height of medium resource size, select large resource.  
    if (frameSize.height > mediumResource.size.height)  
    {   
        CCFileUtils::sharedFileUtils()->setResourceDirectory(largeResource.directory);  
        pDirector->setContentScaleFactor(largeResource.size.height/designResolutionSize.height);  
    }  
    // if the frame's height is larger than the height of small resource size, select medium resource.  
    else if (frameSize.height > smallResource.size.height)  
    {   
        CCFileUtils::sharedFileUtils()->setResourceDirectory(mediumResource.directory);  
        pDirector->setContentScaleFactor(mediumResource.size.height/designResolutionSize.height);  
    }  
    // if the frame's height is smaller than the height of medium resource size, select small resource.  
    else  
    {   
        CCFileUtils::sharedFileUtils()->setResourceDirectory(smallResource.directory);  
        pDirector->setContentScaleFactor(smallResource.size.height/designResolutionSize.height);  
    }  
      
    // turn on display FPS  
    pDirector->setDisplayStats(true);  
  
    // set FPS. the default value is 1.0/60 if you don't call this  
    pDirector->setAnimationInterval(1.0 / 60);  
  
    // create a scene. it's an autorelease object  
    CCScene *pScene = HelloWorld::scene();  
  
    // run  
    pDirector->runWithScene(pScene);  
  
    return true;  
}  
 
当程序进入后台时(不活跃)会调用applicationDidEnterBackground()函数,比如在玩游戏的时候一个电话打进来,程序就会进入后台
在这里可以释放一些资源,如:停止音乐播放,停止动画等
[cpp] 
void AppDelegate::applicationDidEnterBackground() {  
    CCDirector::sharedDirector()->stopAnimation();  
  
    // if you use SimpleAudioEngine, it must be pause  
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();  
}  
 
当程序在次活跃时,会调用applicationWillEnterForeground()函数,可以在这里恢复音乐的播放,动画等
[cpp]  
// this function will be called when the app is active again  
void AppDelegate::applicationWillEnterForeground() {  
    CCDirector::sharedDirector()->startAnimation();  
  
    // if you use SimpleAudioEngine, it must resume here  
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();  
}  
 
HelloWorldScene场景类:
[cpp]  
class HelloWorld : public cocos2d::CCLayer  
{  
public:  
    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone  
    virtual bool init();    
  
    // there's no 'id' in cpp, so we recommend returning the class instance pointer  
    static cocos2d::CCScene* scene();  
      
    // a selector callback  
    void menuCloseCallback(CCObject* pSender);  
      
    // implement the "static node()" method manually  
    CREATE_FUNC(HelloWorld);  
};  
 
关键的函数是init,主要是构建场景中的各种元素:如菜单项(CCMenuItem)、精灵(CCSprite)、文本(CCMenuLabel)等,每次创建元素后必须使用addChild()函数将其加入到场景中,addChild()有三个参数:1、要加入场景的对象的指针,2、绘制层的顺序,3、Tag标记。Tag标记方便用函数,getChildByTag(tag)函数取回对象,以便使用,HelloWorld的init函数必须先调用父类的init()函数:
[cpp]  
bool HelloWorld::init()  
{  
    //////////////////////////////  
    // 1. super init first  
    if ( !CCLayer::init() )  
    {  
        return false;  
    }  
      
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();  
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();  
  
    /////////////////////////////  
    // 2. add a menu item with "X" image, which is clicked to quit the program  
    //    you may modify it.  
  
    // add a "close" icon to exit the progress. it's an autorelease object  
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(  
                                        "CloseNormal.png",  
                                     
补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,