一、场景与层的关系:

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);//创建copyRightauto copyRight = Sprite::createWithSpriteFrameName("shoot_copyright.png");copyRight->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height / 3*2));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 / 2, origin.y + visibleSize.height / 7*3));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游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建

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

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

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

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

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

  5. 《LUA游戏开发实践指南》学习笔记1

    本文只做个人学习笔记! Lua脚本语言的优点:免费.小巧.快速和易移植. 游戏项目中的Lua,可以完成以下工作 编辑游戏用户界面(玩家和你的游戏进行交互的媒介) 定义.存储和管理游戏数据(Lua本人并 ...

  6. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

    文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...

  7. 《Lua游戏开发实践指南》学习笔记3

    深入学习Lua table数据结构 在这里,小编给各位说个小伤感的笑话,我的一个好×××啊去一家公司面试,该企业面试的全是有关lua的题,其中有一道题是这样的,问"Lua中有数组吗?&quo ...

  8. android游戏开发——微信打飞机(一)

    学编程也有一点的时间了,所以想写个博客来分享一下自己编程程序的经历,这也可以留着让自己以后对一些的编程技术遗忘时能够回看.这是自己编写的游戏程序.如果在代码的设计.布局和调用上出现有不合理的地方,请各 ...

  9. 微信小程序学习笔记(三)视图与逻辑

    文章目录 1. 页面导航 1.1 什么是页面导航 1.2 声明式导航 1.2.1 导航到 tabBar 页面 1.2.2 导航到非 tabBar 页面 1.2.3 后退导航 1.3 编程式导航 1.3 ...

最新文章

  1. JSON学习笔记(六)- JSONP
  2. int 范围_Java学习之随机生成5个(范围1——33)不同数字的思考
  3. 技术总结:图算法、开源工具及其在工业界的应用场景概述
  4. Java GUI简单点名器
  5. python产生随机数_python技能:random库的使用
  6. 响应已被截断_技术:RWD响应式网站网页设计基本原则
  7. OpenCV 累加一个三通道矩阵的所有元素
  8. python print(chr(65))_python 内置函数
  9. 2048游戏作者:2048的成功和我
  10. tplink怎么进去_如何进入路由器设置界面 如何登陆无线路由器
  11. Day54 Java框架 SSH案例_CRM(二)
  12. linux访问网络图片,linux网络图形监控方法
  13. 模型编辑之BIM轻量化
  14. 北华大学计算机程序设计算法提高训练营个人赛(无L)
  15. CodeVS4416 FFF 团卧底的后宫
  16. Js的Mixin 模式
  17. android实现微信网页浏览、QQ下拉效果SlidingLayout
  18. 福利,一张图看懂IT售前工程师修炼之道
  19. 网络模块到底怎么封装,带你“一览众山小”
  20. 高清大图素材图片资源,你知道哪里找么?

热门文章

  1. springboot mybatis 事务_SpringBoot 下 Mybatis 的缓存
  2. c语言goto语句用法_C语言中的goto语句该不该使用?
  3. Android8.0适配方案
  4. QT界面操作1:如何跟踪鼠标位置?
  5. python知识:用turtle绘制樱桃树
  6. 公式编辑语言:LaTeX/Advanced Mathematics
  7. android 页卡切换实现,TabLayout+ViewPager实现选项卡切换效果
  8. 2020-12-11 Python中的 if __name__ == “__main__“
  9. shell脚本字符串截取
  10. python 获取文件后缀名的方法