cocos2d-x 学习笔记

工具下载和配置:

cocos2d-x 2.2.3官网下载http://www.cocos2d-x.org/download

工具的配置手册http://www.cocos2d-x.org/wiki/Getting_Started_with_Cocos2d-x


Mac环境下创建工程:

打开终端,切换目录到cocos2d-x-2.2.3/tools/project-creator,使用create_project.py脚本来创建工程。

Jason:project-creator shengju$ ./create_project.py 

Usage: create_project.py -project PROJECT_NAME -package PACKAGE_NAME -language PROGRAMING_LANGUAGE

Options:

  -project   PROJECT_NAME          Project name, for example: MyGame

  -package   PACKAGE_NAME          Package name, for example: com.MyCompany.MyAwesomeGame

  -language  PROGRAMING_LANGUAGE   Major programing lanauge you want to used, should be [cpp | lua | javascript]


Sample 1: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame

Sample 2: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame -language javascript


根据提示来创建新工程。

Jason:project-creator shengju$ ./create_project.py -project Hello -package com.jason.hello -language cpp 

proj.ios : Done!

proj.android : Done!

proj.win32 : Done!

proj.winrt : Done!

proj.wp8 : Done!

proj.mac : Done!

proj.blackberry : Done!

proj.linux : Done!

proj.marmalade : Done!

proj.tizen : Done!

proj.wp8-xaml : Done!

New project has been created in this path: /Users/shengju/Downloads/cocos2d-x-2.2.3/projects/Hello

Have Fun!

Jason:project-creator shengju$ 


工程创建完毕,可以看到我们的项目创建在projects目录下。打开我们的项目目录,会看到生成了各个平台的项目目录。

Jason:projects shengju$ cd Hello/

Jason:Hello shengju$ ls

Classes proj.androidproj.ios proj.macproj.tizen proj.winrtproj.wp8-xaml

Resources proj.blackberryproj.linux proj.marmaladeproj.win32 proj.wp8


HelloWorld工程分析:

打开新建的Hello.xcodeproj,app的入口是main.m。

int main(int argc,char *argv[]) {

    

    NSAutoreleasePool * pool = [[NSAutoreleasePoolalloc] init];

   int retVal = UIApplicationMain(argc, argv,nil, @"AppController");

    [poolrelease];

   return retVal;

}

通过main.m看到appdelgate是AppController类,cocos2d-x的启动流程和普通的app一样,我们查看一下AppController类的实现。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    

    // Override point for customization after application launch.


    // 创建窗口

   window = [[UIWindowalloc] initWithFrame: [[UIScreenmainScreen] bounds]];

    

    // 初始化EAGLView

    EAGLView *__glView = [EAGLView viewWithFrame: [windowbounds]

                                    pixelFormat: kEAGLColorFormatRGB565

                                    depthFormat: GL_DEPTH24_STENCIL8_OES

                             preserveBackbuffer: NO

                                     sharegroup: nil

                                  multiSampling: NO

                                numberOfSamples: 0];


    // 设置glView为根视图

    viewController = [[RootViewControlleralloc] initWithNibName:nilbundle:nil];

    viewController.wantsFullScreenLayout =YES;

   viewController.view = __glView;


    // 设置窗口的根视图控制器

    if ( [[UIDevicecurrentDevice].systemVersionfloatValue] < 6.0)

    {

        // iOS 6以下使用addSubView

        [window addSubview: viewController.view];

    }

   else

    {

        //IOS 6以上设置窗口的rootViewController属性

        [windowsetRootViewController:viewController];

    }

    

    [windowmakeKeyAndVisible];

    

    [[UIApplicationsharedApplication] setStatusBarHidden:true];

    

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


    return YES;

}


上面代码大部分都是ios平台应用加载后的一些初始化处理,创建opengl环境。初始化完成后是通过单例的CCApplication对象的run方法来进入cocos2d-x的世界的。我们看一下run方法的实现。

int CCApplication::run()

{

    if (applicationDidFinishLaunching()) 

    {

        [[CCDirectorCallersharedDirectorCaller] startMainLoop];

    }

   return 0;

}


我们看到run方法调用了applicationDidFinishLaunching方法。这个方法的实现在AppDelegate.cpp中。

boolAppDelegate::applicationDidFinishLaunching() {

    // 初始化导演

   CCDirector* pDirector = CCDirector::sharedDirector();

   CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();


    pDirector->setOpenGLView(pEGLView);

    // 开启fps显示

    pDirector->setDisplayStats(true);


    // 设置fps,如果没有调用改方法,默认值1.0/60,也就是每秒60帧

    pDirector->setAnimationInterval(1.0 /60);


    // 创建HelloWord场景,这是个自动释放的对象

   CCScene *pScene = HelloWorld::scene();


    // 运行场景

    pDirector->runWithScene(pScene);


    return true;

}


接下来我们看下HelloWorld场景是如何创建的。

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

};

我们看到HelloWorld类有四个方法,一个是初始化虚函数,一个是类方法用于创建场景,一个菜单的回调处理函数,最后一个方法是通过宏来封装的。

/**

 * define a create function for a specific type, such as CCLayer

 * @__TYPE__ class type to add create(), such as CCLayer

 */

#define CREATE_FUNC(__TYPE__) \

static __TYPE__* create() \

{ \

    __TYPE__ *pRet = new __TYPE__(); \

    if (pRet && pRet->init()) \

    { \

        pRet->autorelease(); \

        return pRet; \

    } \

    else \

    { \

        delete pRet; \

        pRet = NULL; \

        return NULL; \

    } \

}


通过查看宏定义,我们看到这个宏的定义就是为了创建一个指定类型的对象,调用初始化函数,并且该对象是自动释放的。

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

bool HelloWorld::init()

{

    //

    // 1.调用父类初始化函数

   if ( !CCLayer::init() )

    {

        return false;

    }

    

   CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();

    CCPoint origin =CCDirector::sharedDirector()->getVisibleOrigin();


    /

    // 2. 添加菜单项,点击后退出程序

    //

    // 为菜单项设置图标,点击后退出

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


    //创建菜单

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

    pMenu->setPosition(CCPointZero);

   this->addChild(pMenu,1);


    /

    // 3. add your codes below...


    // 添加标签显示"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);


    // 在屏幕中间设置精灵

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


    //添加精灵到Layer下

   this->addChild(pSprite,0);

    

    return true;

}


init方法首先调用了父类的init,然后获取窗口的大小和原点,设置菜单,标签,和精灵。

初始化完成运行场景,开始主循环。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值