cocos2d-x3.x学习之旅(一)

来源:互联网 发布:白金数据l先生是谁 编辑:程序博客网 时间:2024/05/21 07:48
    cocos2d-x3.x学习之旅(一)
   今天下定决心开始研究cocos2d-x游戏引擎,特此决定写博客记录本人学习cocos2d-x过程中的一点一滴,如果一下内容有误,请大家帮忙矫正,请多多关照! 谢谢!
     cocos2d-x简介:
     Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。(摘自百度)
cocos2d-x项目中的目录结构:
      http://write.blog.csdn.net/postedithttp://write.blog.csdn.net/postedit
      其中Classes文件是存放代码的。
       proj.android、proj.ios_mac、proj.linux、proj.win32、proj.wp8-xaml是各各平台的工程文件。
       Resources是存放音频文件,字体,字库,图片等资源。
    (实际上每个项目里的文件都是在项目创建时把cocos2d-x-3.2\templates\cpp-template-default里的文件夹拷贝到项目文件夹里)
今天我们就以proj.win32为例, 点击
proj.win32里的解决方案文件。不用怀疑,因为youxi是我创建项目命名的。
好了已经打开vs2013了,先来看解决方案‘游戏’:


 libAudio是音效引擎,libchipmunk是物理引擎,libcocos2d是存放cocos2d的源代码的(在编译项目过程中是先编译这三个文件的),youxi就不用多说喽,哈哈!

这是项目中的源代码文件,这些文件都和项目文件夹里的文件相对应的,在开发中我们只关心Classes里面的代码就行。
目录结构介绍完了!下面是AppDelegate.cpp和HelloWorldScene.cpp的中文注释
AppDelegate.cpp:

#include "AppDelegate.h"
#include "HelloWorldScene.h"

USING_NS_CC;//命名空间
//应用程序委托对象"/"采用委托设计模式(游戏启动会调用它)
AppDelegate::AppDelegate() {

}

AppDelegate::~AppDelegate()
{
}
//应用程序启动时调用它
bool AppDelegate::applicationDidFinishLaunching() {
    // 初始化导演
    auto director = Director::getInstance();
    //视图
    auto glview = director->getOpenGLView();
    if(!glview) {
        //初始化视图
        glview = GLView::create("My Game");
        director->setOpenGLView(glview);
    }

    // 是否显示帧率
    director->setDisplayStats(true);

    // 设置帧率
    director->setAnimationInterval(1.0 / 60);

    // 初始化(创建)层(场景),把层添加到场景里
    auto scene = HelloWorld::createScene();

    // 场景跳转
    director->runWithScene(scene);

    return true;
}

// 游戏移到后台运行
void AppDelegate::applicationDidEnterBackground() {
    Director::getInstance()->stopAnimation();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
}

// 把游戏从后台移到前台运行
void AppDelegate::applicationWillEnterForeground() {
    Director::getInstance()->startAnimation();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}
HelloWorldScene.cpp:
#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
    // 创建场景对象
    auto scene = Scene::create();
    
    // 创建层对象
    auto layer = HelloWorld::create();

    //把层添加到场景里
    scene->addChild(layer);

    // return the scene
    return scene;
}

// 初始化当前层
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    //得到屏幕的大小
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    //得到屏幕原点的大小

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // 得到图片菜单
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    //指定菜单位置
    closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // 菜单项
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    //标签
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // 指定标签的位置
    label->setPosition(Vec2(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(label, 1);

    // 创建图片精灵
    auto sprite = Sprite::create("HelloWorld.png");

    // 设置图片精灵的位置
    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    //把图片精灵放到层里
    this->addChild(sprite, 0);
    
    return true;
}

//点击close按钮时调用的回调函数
void HelloWorld::menuCloseCallback(Ref* pSender)
{
    //如果是win8或rt平台就是true
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
    MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
    return;
#endif
    
    Director::getInstance()->end();
    //如果是ios平台就是true
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}
哎呀!其实每个源文件里的每一行代码都有英文注释,大家不懂的可以有道一下! 嘻嘻!
                          (完)谢谢大家捧场! 献丑了!
0 0