`

COCOS2D-X HelloWorld项目的启动流程

 
阅读更多
项目创建完毕后。见Class目录。

主要是AppDelegate(应用导演)和HelloWorldScene(示例层)。

AppDelegate 是 Cocos2D-x的内部入口。

从操作系统到Cocos 会先进入 AppDelegate。

也就是当 '引擎' 初始化完毕后,会调用AppDelegate的 ApplicationDidFinishLaunching 方法。

在 AppDelegate 中 执行游戏的初始化,设置分辨率并启动场景。






[AppDelegate.cpp]

bool AppDelegate::applicationDidFinishLaunching() {

    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();

    //初始化OpenGLs视图 如果成功就会根据对应平台完成对象实现。
    if(!glview) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
        glview = GLViewImpl::createWithRect("SmartGame", Rect(0, 0, designResolutionSize.width, designResolutionSize.height));
#else
        glview = GLViewImpl::create("SmartGame");
#endif
    //导演了设置OpenGL
        director->setOpenGLView(glview);
    }

    // turn on display FPS (显示帧率)
    director->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don't call this
    // 一般肉眼这个刷新频率够了
    director->setAnimationInterval(1.0 / 60);

    // Set the design resolution
    // 设置  屏幕分辨率
    glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
    Size frameSize = glview->getFrameSize();

    //如果OpenGl拿出的高度大于中等大小才会执行的代码块,应该是适屏设置。
    if (frameSize.height > mediumResolutionSize.height)
    {        
        director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width));
    }
    // if the frame's height is larger than the height of small size.
    else if (frameSize.height > smallResolutionSize.height)
    {        
        director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width));
    }
    // if the frame's height is smaller than the height of medium size.
    else
    {        
        director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width));
    }

    register_all_packages();

    // create a scene. it's an autorelease object
    // 创建HelloWorld场景,这个场景对象会交给Cocosed-x管理,不需要手动释放
    auto scene = HelloWorld::createScene();

    // 运行这个场景
    director->runWithScene(scene);

    return true;
}





当导演runWithScene 运行该场景时。

会先进入该场景的ini 初始化方法。


[HelloWorldScene.cpp]


bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first ,必须先执行父类的初始化。
    if ( !Layer::init() )
    {
        return false;
    }
    // 屏幕的可见区域值
    Size visibleSize = Director::getInstance()->getVisibleSize();
    // 原点的位置
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    // 关闭按钮是一个 MenuItemImage (菜单项) 对象。
    // create 方法中的前两个参数代表着选中与非选中状态显示的图。
    // 当他被单击的时候,CC_CALLBACK_1开始执行回调函数,即helloWorld的menuCloseCallback
    // 函数原型
    /**
                                *参数 Ref* 代表单击事件都发送者,即MenuItemImage!

        void HelloWorld::menuCloseCallback(Ref* sender){
           Director::getInstance()->end();
        }
    */
    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));

    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    // 设置类菜单位置,以后记住这代表右下角。
    menu->setPosition(Vec2::ZERO);
    // 此行代表加到场景中。
    // 第二个参数代表绘制层的顺序,默认参数值为0,
    // 表示最高优先层导入,该值越大表示该层在最后加载(在最高一层),一般背景图层是首先加载,
    // 其他元素在加载在背景层上面。因为背景在后面加载的话,会覆盖掉前面加载的元素,看不到想要的图层组合效果。
    this->addChild(menu, 1);


    // 创建文本,选择指定字体库,设置字号
    auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);

    // 设置位置, X 剧中 , y 偏上
    // 此处标记 Vec2的居中布局位置 : (原点x轴的起始位置向右偏移至总屏幕可见范围一半的位置
    // 即 origin.x + visibleSize.width/2
    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);

    // add "HelloWorld" splash screen"
    // 这里创建里一个精灵,用于显示纹理(就是贴图)。
    auto sprite = Sprite::create("HelloWorld.png");

    // x y 轴起点偏移至屏幕可见范围的一半,上下左右都居中
    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);
    
    return true;
}



本文内容源自:http://spu.dangdang.com/23947634.html
  • 大小: 1.8 MB
分享到:
评论

相关推荐

    cocos2d-x windows vs2010配置

    接下来,把 F:\cocos2d-1.0.1-x-0.9.1\cocos2dx 和 F:\cocos2d-1.0.1-x-0.9.1\CocosDenshion 这两个文件夹里面的全部内容拷贝一份到 D:\cocos2d-xProjects\HelloWorld 中去。 九、设置静态链接库 接下来,打开 F:\...

    Cocos2d-x学习笔记

    5. 在解决方案中选择HelloWorld项目作为起点,这是Cocos2d-x提供的一个基础示例,可以快速看到游戏框架运行的效果。 6. 编译并运行HelloWorld项目,观察到基本的游戏框架运行在屏幕上,此时Cocos2d-x的入门学习已...

    Cocos2d-x HelloWorld代码部分类图及时序图

    在“Cocos2d-x HelloWorld代码部分类图及时序图”中,我们将会探讨这个框架的基础构建块,以及如何通过代码来实现一个简单的“HelloWorld”程序。 首先,让我们关注“HelloWorld”类图。在Cocos2d-x中,"HelloWorld...

    Cocos2d-x教程

    - **初学者**:可以通过本书快速上手Cocos2d-x的基本操作与开发流程。 - **有一定经验的开发者**:能深入了解Cocos2d-x的高级功能与技巧,比如游戏效率优化、网络通信等。 - **对引擎原理感兴趣者**:可以通过对...

    Cocos2d-X深入分析pdf(红孩儿)

    文档通过分析HelloWorld示例,向读者展示了Cocos2d-x框架的程序启动和运行流程,让读者对框架的结构和工作原理有了更深刻的理解。从创建AppDelegate类实例,到调用CCApplication的run方法,这一系列动作背后的逻辑是...

    Cocos2d-x游戏开发实战精解-教学PPT

    这部分会讲解Cocos2d-x的项目结构,如何搭建开发环境,并引导读者进行第一个Hello World项目的创建,从而对Cocos2d-x有一个基本的认识。 接下来,"Cocos2d-x基础知识学习"部分会详细讲解Cocos2d-x的基本概念,包括...

    cocos2d-x权威指南源代码

    开发者可能还会了解到如何使用cocos2d-x的内置编辑器Cocos Creator或者第三方工具进行图形界面的设计,以及如何将项目打包发布到不同的目标平台。 压缩包中的代码实例通常会对应书中的各个章节,每个实例都对应一个...

    cocos2d-x 11-10-20发布的

    - **Visual Studio集成**:cocos2d-x与Visual Studio有良好的集成,开发者可以通过VS进行项目创建、调试和部署。 - **DirectX支持**:在Windows上,cocos2d-x利用DirectX进行图形渲染,提供高性能的游戏体验。 5....

    cocos2d-x测试代码

    6. `HelloWorld.png`、`CloseNormal.png`、`CloseSelected.png`:这些是资源文件,通常在cocos2d-x游戏中用于显示图像。`HelloWorld.png`可能是“Hello, World!”的文字或者图标,而`CloseNormal.png`和`...

    Android Cocos2d-x 环境配置

    2.4. **项目转换**:Cocos2d-x项目通常包含一个Hello World示例,以及TestCpp项目,它们都是用来测试引擎功能的。在Eclipse中导入这些项目,可以熟悉Cocos2d-x的构建过程和结构。首先,根据Cocos2d-x的官方文档或...

    cocos2d-x 场景切换

    《cocos2d-x场景切换详解》 在游戏开发或者应用设计中,场景切换是一个至关重要的环节,它决定了用户在不同界面之间的流畅体验。cocos2d-x作为一款广泛使用的2D游戏引擎,其场景管理功能强大且灵活,能够帮助开发者...

    cocos2d-x配置指南

    接下来,你可以尝试运行cocos2d-x自带的test项目,同样设置为启动项目,查看cocos2d-x提供的各种功能和效果。 为了方便创建新的cocos2d-x项目,文章中还介绍了安装Visual Studio模板的步骤。在解压后的文件夹中找到...

    Cocos2d-x 3.X游戏开发入门精解.pdf

    4. **Hello World示例**:通过创建简单的 Hello World 游戏,让开发者熟悉 Cocos2d-x 的基本用法。 ### 高级功能讲解 1. **精灵与动画**:解释如何在 Cocos2d-x 中添加精灵(Sprite)以及实现动画效果。 2. **场景...

    龙灵修-讲Lua的cocos2d-x进阶视频.rar

    cocos2d-x进阶教程1_2编写自己的Lua版本的HelloWorld.mp4 cocos2d-x进阶教程1_3Lua语言的注释、变量、语句块.mp4 cocos2d-x进阶教程1_4Lua中函数、条件判断语句.mp4 cocos2d-x进阶教程1_5Lua中循环语句和逻辑运算...

    Cocos2d-x--珍藏版

    - **HelloWorld测试项目**:使用Windows版的HelloWorld示例,通过Visual Studio打开cocos2d-win32.vc2008.sln解决方案文件,并将HelloWorld项目设置为启动项目。按照生成->调试->启动新实例的顺序来运行HelloWorld...

    cocos2d-x配置

    6. **开始使用cocos2d-x**:在Visual Studio中打开`sln`文件,选择HelloWorld项目作为启动项,进行编译并运行。若无错误,将显示cocos2d-x的欢迎界面。同样,你也可以将测试项目设为启动项,查看各种cocos2d-x的功能...

    Cocos2d-x高级开发教程

    ### Cocos2d-x高级开发教程知识点概览 #### 一、Cocos2d-x引擎概述 - **定义与特点**:Cocos2d-x是一款专为2D游戏设计的跨平台游戏引擎,其设计灵感来源于Cocos2d-iPhone。它具有简单易用、性能高效、灵活性强等...

    Cocos2d-iphone之HelloWorld

    Cocos2d-iphone之HelloWorld

    cocos2d-1.0.1-x-0.11.0 安装包

    HelloWorld是Cocos2d-x项目中的一个示例应用,用于新手入门。它展示了如何创建一个简单的“Hello, World!”程序,包括初始化引擎、加载场景、添加精灵和调度器等基本操作,帮助开发者理解框架的基本工作流程。 2. ...

Global site tag (gtag.js) - Google Analytics