Cocos2d-x学习笔记(一)环境搭建与项目创建

可运行的代码可以说明一切问题。

 

环境需安装VS201x + Python2.7 + Cocos2d-x-2.2.5。

1. 点击cocos2d-win32.vc201x.sln,打开后,编译(可以查看一下,例子项目的依赖项);

2. TestCpp中,查看各种特性的例子与效果(从这里能更快速学习);

3. 进入目录cocos2d-x-2.2.5\tools\project-creator,使用脚本create_project.py来创建项目;一般将在cmd命令窗口下创建。有机会,可以看看该python脚本的内容,大概200行左右;具体操作如下图所示:

  Cocos2d-x学习笔记(一)环境搭建与项目创建

  这里,我们创建了一个名为FirstGame的项目,使用语言是C++。结果:创建出了各个平台的项目。这里选在Win32上开发(无强制要求)。

  Cocos2d-x学习笔记(一)环境搭建与项目创建

  Resources目录中存资源;Classes目录中存代理和场景定义源文件且被其它项目共享;剩余目录均为项目目录。

  创建成功后的解决方案目录结构如下:

  Cocos2d-x学习笔记(一)环境搭建与项目创建

  至此,一个项目即创建成功。从下边几个文件的命名即可看出其中的逻辑:AppDelegate的作用就是一个桥梁,HelloWorldScene就是一个场景的简单示例,而main则是程序的入口。

  下边会项目中重要的几个文件的内容代码贴在下边(部分文件我也添加了一部分注释):

  AppDelegate.h

#ifndef  _APP_DELEGATE_H_

#define  _APP_DELEGATE_H_



#include "cocos2d.h"



/**

@brief    The cocos2d Application.



The reason for implement as private inheritance is to hide some interface call by CCDirector.

*/

class  AppDelegate : private cocos2d::CCApplication

{

public:

    AppDelegate();

    virtual ~AppDelegate();



    /**

    @brief    Implement CCDirector and CCScene init code here.

    @return true    Initialize success, app continue.

    @return false   Initialize failed, app terminate.

    */

    virtual bool applicationDidFinishLaunching();



    /**

    @brief  The function be called when the application enter background

    @param  the pointer of the application

    */

    virtual void applicationDidEnterBackground();



    /**

    @brief  The function be called when the application enter foreground

    @param  the pointer of the application

    */

    virtual void applicationWillEnterForeground();

};



#endif // _APP_DELEGATE_H_

 

  AppDelegate.cpp

#include "AppDelegate.h"

#include "HelloWorldScene.h"



USING_NS_CC;



AppDelegate::AppDelegate() {

    // Constructor

}



AppDelegate::~AppDelegate() 

{

    // Desctructor

}



// After launching, enter the function below

bool AppDelegate::applicationDidFinishLaunching() {

    // initialize director

    CCDirector* pDirector = CCDirector::sharedDirector();

    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

    // Set OpenGL view

    pDirector->setOpenGLView(pEGLView);

    

    // turn on display FPS (Frame per sesond)

    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 the created scene

    // Really start from here

    pDirector->runWithScene(pScene);



    return true;

}



// This function will be called when the app is inactive. When comes a phone call,it's be invoked too

// Enter background

void AppDelegate::applicationDidEnterBackground() {

    CCDirector::sharedDirector()->stopAnimation();



    // if you use SimpleAudioEngine, it must be paused

    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();

}



// this function will be called when the app is active again

// Enter foreground

void AppDelegate::applicationWillEnterForeground() {

    CCDirector::sharedDirector()->startAnimation();



    // if you use SimpleAudioEngine, it must resume here

    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();

}

HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__



#include "cocos2d.h"



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

};



#endif // __HELLOWORLD_SCENE_H__

HelloWorldScene.cpp

#include "HelloWorldScene.h"



USING_NS_CC;



CCScene* HelloWorld::scene()

{

    // 'scene' is an autorelease object

    CCScene *scene = CCScene::create();

    

    // 'layer' is an autorelease object

    HelloWorld *layer = HelloWorld::create();



    // add layer as a child to scene

    scene->addChild(layer);



    // return the scene

    return scene;

}



// on "init" you need to initialize your instance

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",

                                        "CloseSelected.png",

                                        this,

                                        menu_selector(HelloWorld::menuCloseCallback));

    

    pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,

                                origin.y + pCloseItem->getContentSize().height/2));



    // create menu, it's an autorelease object

    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);

    pMenu->setPosition(CCPointZero);

    this->addChild(pMenu, 1);



    /////////////////////////////

    // 3. add your codes below...



    // add a label shows "Hello World"

    // create and initialize a label

    

    CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);

    

    // position the label on the center of the screen

    pLabel->setPosition(ccp(origin.x + visibleSize.width/2,

                            origin.y + visibleSize.height - pLabel->getContentSize().height));



    // add the label as a child to this layer

    this->addChild(pLabel, 1);



    // add "HelloWorld" splash screen"

    CCSprite* pSprite = CCSprite::create("HelloWorld.png");



    // position the sprite on the center of the screen

    pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));



    // add the sprite as a child to this layer

    this->addChild(pSprite, 0);

    

    return true;

}





void HelloWorld::menuCloseCallback(CCObject* pSender)

{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)

    CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");

#else

    CCDirector::sharedDirector()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    exit(0);

#endif

#endif

}

main.cpp

#include "main.h"

#include "AppDelegate.h"

#include "CCEGLView.h"



USING_NS_CC;



int APIENTRY _tWinMain(HINSTANCE hInstance,

                       HINSTANCE hPrevInstance,

                       LPTSTR    lpCmdLine,

                       int       nCmdShow)

{

    UNREFERENCED_PARAMETER(hPrevInstance);

    UNREFERENCED_PARAMETER(lpCmdLine);



    // create the application instance

    AppDelegate app;

    CCEGLView* eglView = CCEGLView::sharedOpenGLView();

    eglView->setViewName("FirstGame");

    eglView->setFrameSize(480, 320);

    return CCApplication::sharedApplication()->run();

}

 

你可能感兴趣的:(cocos2d-x)