一、场景与层的关系:

cocos2dx的框架可以说主要由导演,场景,层,精灵来构成:

1、其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏。

2、场景就像电影的一幕剧情,所以说,懂得如何划分好游戏的场景,是开始动手做游戏的第一步。

3、一个场景会有很多层,用来处理场景不同的功能。

4、而精灵则是最小的单位,比如子弹,飞机,敌机都是一个个的精灵所组成的。

二、WelcomeScene的搭建:

1、场景和层的二种搭建方法:

(1)一种就是跟HelloWorld示例一样的方法,以一个层为主体,然后这个层建立成一个场景,这种方式适合用再一个场景下只有一个层的时候,可以缩短代码的长度。

(2)另一种就是先建立一个场景,然后再建立层。这是我比较推荐的做法,因为本人是个小白,认为这种方法比较如何我们正常人的思维= =。然后先贴WelcomeScene.h的代码:

#include "cocos2d.h"

USING_NS_CC;                         //用引擎要的头文件和名字空间

class WelcomeScene :public Scene
{
public: CREATE_FUNC(WelcomeScene); //一个宏定义 virtual bool init(); //继承的init方法
};

1、CREATE_FUNC():其实它就是一个宏定义,可以追踪下去看他的代码:

#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; \ } }

其实就是一个创建的方法,首先new一个新的对象,然后检验是否申请到内存,没有的话直接跳过,有的话,执行init()的方法。于是呢init()方法便成为一个场景的主干,就相当于C++语言的main函数的感觉吧。

2、然后就是init的方法做了什么,我们看看WelcomeScene.cpp:

#include "WelcomeScene.h"
#include "WelcomeLayer.h" USING_NS_CC; bool WelcomeScene::init()
{
if (!Scene::init())
{
return false;
} auto layer = WelcomeLayer::create();
if (layer)
{
this->addChild(layer);
} return true;
}

其实就是创建一个WelcomeLayer然后通过addChild的方法加到这个场景当中。

三、WelcomeLayer的搭建

如果说Scene是个大的一幕剧情,那么layer就代表了这一幕剧情中每一个角色。

这个WelcomeLayer主要是实现一个资源的加载,由于不能太过无聊所以还得加一个小小的缓冲帧动画。然后:

1、我们先看如何进行资源的加载和背景的加入。

//主要通过cocos已经实现的单例将所需要的图片的plist文件加入
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("shoot.plist");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("shoot_background.plist"); //创建背景
auto background = Sprite::createWithSpriteFrameName("background.png");
background->setAnchorPoint(Vec2::ZERO);
background->setPosition(Vec2::ZERO);
this->addChild(background); //创建copyRight
auto copyRight = Sprite::createWithSpriteFrameName("shoot_copyright.png");
copyRight->setPosition(Vec2(origin.x + visibleSize.width/, origin.y + visibleSize.height / *));
this->addChild(copyRight);

(1)大家可以想一下,其实一个游戏的本质就是在不停的绘图,那你想想,如果每次再画一个图的时候再把图片加入到内存中,是不是会一卡一卡的 = = 所以呢,我们通过cocos2d封装的方法一次性先加入进去。

(2)然后大家可能不大清楚什么是plist文件,首先我们加载图片资源的时候,其实是把所有的图片打包成一个图片加入进去的,但我们要记录那个图片在新生成的图片的哪一个位置,所以便需要引入一个plist文件,它就是一张表格,记录了每个图片在新生成图片中的位置。上图。如下~

     ……                                             

小的图片                                                                                         打包后新生成的图片。

(3)然后就是创建一个背景的精灵,设置锚点和位置,最后加入到这个层中。然后主要是这个锚点的定义,锚点其实就相当于在一个图片上打上一个图钉,以这一个图钉的位置来代表整个图片的位置,然后通过setPosition来设置图片的位置。

(4)copyRight和背景的创建类似。

(5)Vec2就是Point,代表一个点的数据类型。

2、帧动画的创建:

auto gameLoading = Sprite::createWithSpriteFrameName("game_loading1.png");
gameLoading->setPosition(Vec2(origin.x + visibleSize.width / , origin.y + visibleSize.height / *));
this->addChild(gameLoading); auto animation = Animation::create();
animation->setDelayPerUnit(0.5f);
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading1.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading2.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading3.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading4.png"));
auto animate = Animate::create(animation); gameLoading->runAction(animate);
return true;

帧动画就是通过记账图片在很短的时间内进行形成的动画,所以可以看到,我们先设置动画的第一帧为一个精灵,然后创建一个帧动画,通过addSpriteFrame的方法加入图片,然后通过setDelayPerUnit的方法设置切换图片的时间,然后让精灵做这个动画,然后的然后就看效果吧,这一节学习笔记就结束了= =,我怎么觉得写完会累死的节奏。

cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建的更多相关文章

  1. cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建

    一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...

  2. cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

    一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...

  3. cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建

    一.创建文件~ BulletLayer.h BulletLayer.cpp 二.How to do? (1)实例化BulletLayer方法的实现~ Bullet(PlayerLayer* temp) ...

  4. cocos2dx游戏开发——微信打飞机学习笔记(八)——EnemyLayer的搭建

    一.创建文件= =               EnemyLayer.h               EnemyLayer.cpp Ps:我绝对不是在凑字数~. 二.How to do? (1)一些宏 ...

  5. cocos2dx游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建

    一.创建文件~ 文件名:BackgroundLayer.h BackgroundLayer.cpp 架构就跟前面的一样,我就直接进入正题 啦,而且github有完整代码,欢迎下载~ 二.创建滚动的背景 ...

  6. cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建

    一.七说八说        大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...

  7. cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架

    一.游戏的基本框架: WelcomeScene    ——>    GameScene   ——>   GameOverScene ||                           ...

  8. cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建

    一.创建文件~ PlayerLayer.h PlayerLayer.cpp 一般类名都会和文件名有关系的~(在这里当然是一样) 二.How to do? 1.首先就是放一个飞机~ CC_SYNTHES ...

  9. cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建

    一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...

随机推荐

  1. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  2. catalan number

    http://blog.csdn.net/yutianzuijin/article/details/13161721

  3. ios 在中国地区,24小时时间格式 系统设定下 获得12小时制时间的方法

    如题,在中国地区,24小时时间格式 系统设定下,如果单单使用 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 之后,无论用hh ...

  4. redis与memcache区别总结

    2015年9月2日 14:04:19 总会被问到两者的区别, 在这里总结下: redis 有内置的多种数据结构, list(可用于实现小型队列), hash, set, zset...; memcac ...

  5. JS练习题

    1.带参数的函数不能重复调用 2.顺序语句: 3.在重复调用中打断 调用用 return   例如: Interval 时间间隔   先清一下  再接着 return:其他的调用也可以加return打 ...

  6. September 9th 2016 Week 37th Friday

    Within you, I lose myself. 有了你,我迷失了自我. I never had such feeling, maybe just because I never invested ...

  7. web前端开发:css3实现loading

    web前端开发:css3实现loading 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 <!DOCTYPE ...

  8. No space left on device you must specify the filesystem type--Linux重启挂在失败

    在Linux中拷贝了一个文件比较大5G,直接提示:No SPace Left On Device,很明显是磁盘空间不够了,我因为是在虚拟机上面建的,直接右击虚拟机==>编辑设置 如图片1所示, ...

  9. PHP之MVC项目实战(三)

    本文主要包括以下内容 标准错误错误处理 http操作 PDO 文件操作 标准错误错误处理 PHP在语法层面上发生的错误 两个过程: 触发阶段(发生一个错误) 处理阶段(如何处理该错误) 触发阶段 系统 ...

  10. 三、jQuery--jQuery基础--jQuery基础课程--第6章 jQuery 事件与应用

    1.页面加载时触发ready()事件 ready()事件类似于onLoad()事件,但前者只要页面的DOM结构加载后便触发,而后者必须在页面全部元素加载成功才触发,ready()可以写多个,按顺序执行 ...