• cocos2d-x创建场景


    今天开始学习Cocos2d-x,使用的版本是2.1.4,这个版本比较老,对应的参考资料也比较齐全。

    在mac/xcode环境下,代码是写在Classes文件夹下的,和iOS应用类似,程序从AppDelegate.cpp开始,这当中也有一些生命周期方法,其中有一个

    applicationDidFinishLaunching方法:

     1 bool AppDelegate::applicationDidFinishLaunching()
     2 {
     3     // 创建一个导演类
     4     CCDirector *pDirector = CCDirector::sharedDirector();
     5     pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
     6     // 设置是否显示FPS
     7     pDirector->setDisplayStats(true);
     8     //设置帧率
     9     pDirector->setAnimationInterval(1.0 / 60);
    10     //创建一个初始场景
    11     CCScene *pScene = MainScene::scene();
    12     //执行游戏
    13     pDirector->runWithScene(pScene);
    14     return true;
    15 }

    这部分代码的意图很容易理解,不多解释了,在项目创建的时候,默认带有一个HelloWorld类,把这个类删掉,我们自己建立一个MainScene场景:

    .h文件:

     1 #ifndef __MyGame__MainScene__
     2 #define __MyGame__MainScene__
     3 
     4 #include <iostream>
     5 #include "cocos2d.h"        //导入头文件
     6 using namespace cocos2d;    //使用命名空间
     7 
     8 //场景继承自CCLayer,是一个层的子类
     9 class MainScene : public CCLayer {
    10 public:
    11     //一个虚函数初始化方法
    12     virtual bool init();
    13     //一个用于构建场景的静态方法
    14     static CCScene *scene();
    15     //通过宏,生成一个叫做create的工厂方法
    16     CREATE_FUNC(MainScene);
    17 };

    其中CREATE_FUNC是一个宏,用于创建一个工厂方法,它的实现是:

     1 #define CREATE_FUNC(__TYPE__) 
     2 static __TYPE__* create() 
     3 { 
     4     __TYPE__ *pRet = new __TYPE__(); 
     5     if (pRet && pRet->init()) 
     6     { 
     7         pRet->autorelease(); 
     8         return pRet; 
     9     } 
    10     else 
    11     { 
    12         delete pRet; 
    13         pRet = NULL; 
    14         return NULL; 
    15     } 
    16 }

    .m文件:

     1 #include "MainScene.h"
     2 
     3 //一个用于构建场景的静态方法
     4 CCScene *MainScene::scene() {
     5     //首先通过CCScene的工厂方法创建了一个场景
     6     CCScene *scene = CCScene::create();
     7     //调用由宏生成的工厂方法创建了一个层对象
     8     MainScene *layer = MainScene::create();
     9     //将图层添加到场景上
    10     scene->addChild(layer);
    11     //返回场景
    12     return scene;
    13 }
    14 
    15 //在MainScene::create方法当中调用
    16 bool MainScene::init() {
    17     //首先调用父类的构造方法
    18     if (!CCLayer::init()) {
    19         return false;
    20     }
    21     
    22     //使用图片创建一个精灵,注意Resource下的文件不需要加路径
    23     CCSprite *sprite = CCSprite::create("Icon-72.png");
    24     //为场景增加一个精灵
    25     this->addChild(sprite);
    26     
    27     return true;
    28 }

    这里有一些概念:

    一个游戏有多个场景,这些场景之间通过导演来控制切换;一个场景内可以有多个层,每个层上也可以有多个精灵。

    这样,一个最基本的游戏画面就创建出来了。

  • 相关阅读:
    基于Nodejs生态圈的TypeScript+React开发入门教程
    防止 IE 自动跳兼容模式
    C# DateTime 转 JavaScript Date
    自制 Chrome Custom.css 设置网页字体为微软雅黑扩展
    比較C struct 與 C# unsafe struct内存分佈
    C/C++编程GUI库比较
    WIN32控件使用系统样式
    【转载】Layered Window(分层窗体,透明窗体)
    WM_COMMAND和WM_NOTIFY区别[转]
    MFC RichText 滚动条问题
  • 原文地址:https://www.cnblogs.com/Steak/p/3755943.html
Copyright © 2020-2023  润新知