Cocos2d-x之引擎框架简介
| 版权声明:本文为博主原创文章,未经博主允许不得转载。
1.cocos2d-x的设计思想
cocos2d-x分为导演,场景,图层,精灵,节点;
(1)、导演(Director):控制整个游戏的场景的切换
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
这行代码是在appdelegata中去获得一个导演对象,这个导演是一个全局对象,使用单例的模式使整个游戏使整个游戏只存在一个导演。
导演操作的的具体模式:
》 Director::... 表明导演里可以控制的内容可以进行的操作,如:Director::getInstance();
》 director->...
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
首先来创建一个导演的对象director,在通过director来指定导演将要进行的操作;如:director->runWithScene导演指定运行场景
导演可以进行的操作有:
director->getInstance(); 获得一个导演(一个静态的方法)
director->runWithScene(); 运行一个场景,导演将切换到这个场景
director->replaceScene(); 切换场景,从一个场景到另一个场景,比如从菜单到开始游戏
director->pushScene; 场景添加到导演里去,一个堆栈
director->popScene(); 移除一个场景
也就是说,当游戏运行时,首先要显示一个场景,就是要先将这个场景压入到站中(导演对象中去),一个站中可以有很多个场景;当要显示或者切换另一个场景时且站中此时没有这个场景,这时pushScene就会将对应的场景添加到站中来显示,若站中已经存在这个场景时,但是这个场景在站的下面,此时会使用popScene将上面的场景移除,找到;对应要显示的场景然后在将对应的场景显示出来;这两个韩式维护堆栈的,单眼中存在以个容器来存放这些导演
游戏的暂停和重绘
director->pause(); 暂停当前运行场景中的所有计时器和动作,场景任会显示在屏幕上
director->resume(); 恢复 当前运行场景中的所有计时器和动作
(2)、场景(Scene)多个图层来形成场景
主菜单介绍为例:
当游戏进入时,初始化导演,导演第一步切换到主菜单场景;主菜单场景上面有游戏的名字,开始游戏,场景画面,exit,help...;其中主菜单的场景画面是一个图像背景图片这是一个层,然后还有一些菜单项的选择,比如start,exit,help,声音关闭...这又是一个菜单层;在之后可能场景上可以添加一些游戏精灵的元素。这也可以是一个显示层
直接通过auto scene = Scene::create();去获得一个场景;create()方法的实现
Scene* Scene::create()
{
//先创建一个Scene的指针ret,动态内存空间
Scene *ret = new (std::nothrow) Scene();
if (ret && ret->init()) //init初始化场景,判断是否创建成功
{
ret->autorelease(); ///内存释放
return ret; //成功返回场景
} else
{
CC_SAFE_DELETE(ret);
return nullptr; //放回是失败
}
}
场景就相当于一个盒子,来存放一些东西的(Layer,Sprite),因此没有太多实际的操作。
(3)、布景,图层(Layer):图层可以添加多个精灵,其中图层中还可以嵌套图层
Layer图层有几个操作图层的方法:
图层的创建;如:auto layer = HelloWorld::create();,auto 改为 Layer*,auto是C++的一个新的变量,自动去检测变量的类型,其实这里的auto是Layer*类型的,LayerColor类cocos2d图层的使用,调节图层的颜色,如:
auto color = LayerColor::create(Color4B(, , , ), , );
this->addChild(color);
LayerGradient类 创建一个图层的颜色渐变
auto gradientColor = LayerGradient::create(Color4B(, , , ), Color4B(, , , ), Vec2(, ));
this->addChild(gradientColor);//学习图层的颜色渐变
auto gradientColor = LayerGradient::create(Color4B(, , , ), Color4B(, , , ), Vec2(, ));
this->addChild(gradientColor);
LayerMultiplex类
组合型的图层,就是图层中相互嵌套包含其他图层,形成一个含有多个图层的图层;但是这个嵌套的多个图层中,每次只能切换一个图层来显示,比如在游戏运行中本来有个大的游戏运行;层,但是如果需要道具的显示,这是就会将道具的图层显示出来,; 在下面的代码中,我们可以看到两个层嵌套在了一起,但是当 没有写multiplexLayer->switchTo(1);时;我们发现程序只显示了color的效果,而gradientColor并不显示,这是因为在嵌套的图层中,只能一次显示一个效果;如果我们想显示别的层,只是我们可以通过方法switchTo();来显示我们想显示的东西,其中的参数是一个数字,该数字是要显示的东西在create中所处的位置(从0开始,因此第二个gradientColor的位置为1);因此我们添加上multiplexLayer->switchTo(1);时,就可以看到gradientColor的效果了
auto multiplexLayer = LayerMultiplex::create(color, gradientColor, NULL);
this->addChild(multiplexLayer);
//multiplexLayer->switchTo(1);
auto multiplexLayer = LayerMultiplex::create(color, gradientColor, NULL); this->addChild(multiplexLayer); multiplexLayer->switchTo();
图层其实也是一个容器,没有具体的显示内容,具体的显示要在Sprite来实现,但是他可以有些自己的属性,比如图层的颜色
(4)角色,精灵(Sprite):玩家,怪物,草,道具....
创建一个精灵auto sprite = Sprite::create("HelloWorld.png");精灵的动作:精灵,角色等可以跑动,打....;精灵都会有相应的动作;在cocos2d中有个动画系统的基类CCAction
FiniteTimeAction
瞬时动作,是有限次执行类,它是最为普通的行为,就是按时间顺序做一系列事情,做完后行为结束,FiniteTimeAction类是所有在限时间能够完成的动作(action)的基类
Follow
是一种“跟随”某一个节点的动作.不要使用Camera作为一个跟随者,使用这个类
示例代码:
layer->runAction(Follow::actionWithTarget(hero));
speed
用于线性地改变某个动作的速度;speed类改变一个action的运行速度, 使他持续更长时间 (speed>1)或者更短的时间(speed<1).可以用来模拟慢速动作('slow motion')或者快进动作('fast forward')的效果.
警告:Speed对象不能作为一个动作序列的一部分, 因为它不是一个IntervalAction对象
ActionInstant
即时动作.不同于IntervalAction,即时动作没有持续时间。
ActionInterval
持续动作是需要持续运行一段时间的动作。 它有一个启动时间和结束时间。结束时间由启动时间加上周期得出。
持续时间由很多有趣的特性,例如:
- 他们可以正常运行(default)
- 他们也可以反向运行
- 他们可以随加速器的改变运行
例如:你可以使用正常运行加反向运行模拟一个乒乓球的运动。Example:
Action *pingPongAction = Sequence::actions(action, action->reverse(), nullptr);
(5)、节点:
任何需要画在屏幕上的对象都是节点类。最常见的节点类是场景类(Scene),布景层类(Layer)、精灵类(Sprite)、菜单类(Menu),他们都是继承自节点类.
使用方法: 节点对象 -> 对应的方法;
常见的Node类方法:
getScale(); 获得缩放的系数
setScale(); 设置缩放系数,放大和缩小节点,或者与窗口同比例的缩放
getPosition(); 获得坐标位置
setPosition(); 设置坐标位置
getSkewX(); 获得x轴扭曲效果系数
setSkewX(); 设置x轴扭曲效果系数
getSkewY(); 获得y轴扭曲效果系数
setSkewY(); 设置y轴扭曲效果系数
getContantSize(); 获得节点的大小
setContantSize(); 设置节点的大小
addChild(); 添加子节点,参数包含对象,z轴排序参数
removeChild(); 删除自动节点,参数为节点对象和是否清除本节点
Cocos2d-x之引擎框架简介的更多相关文章
- HTML5游戏开发引擎Pixi.js完全入门手册(一)框架简介及框架结构分析,作者思路剖析
前言: 最近无聊在淘宝弄了个小店,打算做一个兼职.遇到一个客户,要我帮忙拷贝一个html5游戏.. 我这人有一个习惯,拿到自己没见过的东西.都会去研究一番.去网上查了下发现,资料都是英文版.感觉极度不 ...
- Yaf零基础学习总结1-Yaf框架简介
从今天开始,给大家讲解下yaf框架,讲解之前肯定要了解下yaf是个什么东西,当然,从标题我们已经知道yaf是个PHP框架了,也许大家对于PHP框架并不陌生,一般PHP程序员用过的框架至少有一两个吧,国 ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...
- Spring Web MVC框架简介
Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...
- 【mysql】mysql逻辑框架简介及show profile说明
1.mysql逻辑框架简介 和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数 ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- 《HiWind企业快速开发框架实战》(0)目录及框架简介
<HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...
- hdwiki 框架简介
虽然HDwiki是一个开源的wiki系统,并且代码简洁易懂,但如果想在系统上做做进一步开发还需要对框架有一个整体的认识.熟悉了HDwiki的框架以后完全可以独立出来做其他功能的开发,当做一个开源的PH ...
随机推荐
- git update-index --assume-unchanged on directory 转摘自:http://stackoverflow.com/questions/12288212/git-update-index-assume-unchanged-on-directory
30down votefavorite 16 git 1.7.12 I want to mark all files below a given directory as assume-unchang ...
- iview 分割面板效果(一)基本原理
方法一: 基本点就是:利用“子绝父相(子元素相对于父元素进行定位)”, 左侧的pane设置为left:0;right:a%, 则右侧的设置为right:0;left:(100-a)%. 如果左右之间有 ...
- 如何打开mongo运行环境
新建一个文件夹,例如我的在E:\2016web\myapp\src\database 打开数据库 mongod --dbpath=E:/2016web/myapp/src/database 在新开一个 ...
- alpha阶段绩效考核
(按姓氏拼音顺序) (评分还考虑了从开题至今的博客.汇报等工作,但由于太杂乱没法列出) 陈修远 B+ 后端技术踩坑及代码编写 傅泳淦 A- Android端技术踩坑及代码编写 李浩冉 B 后端知识 ...
- Nginx-LNMP架构搭建
目录 Nginx-LNMP架构搭建 LNMP架构概述 LNMP架构环境部署 部署LNMP 部署博客Wordpress 搭建知乎产品wecenter 搭建edusoho (修改域名及安装路径) 数据库拆 ...
- Facade——外观模式
Facade外观模式,也是比较常用的一种模式,基本上所有软件系统中都会用到. GOF 在<设计模式>一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一 ...
- Codeforces 1197E Culture Code DP
题意:你有n个俄罗斯套娃,已知每个套娃的容积和体积,问有多少个子集满足以下条件: 1:这个子集是一个极大子集,即不能再添加其它的套娃到这个子集里. 2:子集的套娃之间的间隙和最小. 思路1:线段树优化 ...
- GOOSE报文解析
GOOSE报文解析 变电站 使用 MMS报文 http://www.360doc.com/content/16/1014/20/36538220_598459873.shtml
- java命令-jstat/ javap
jstat命令对应用程序资源和性能进行实时监控 常用参数列举如下: 1. jstat -class pid 显示加载class的数量.所占空间.所耗时间等信息 2.jstat -compiler pi ...
- react 获取token
1.在action 中发送请求,j将获取得到的token 储存起来 到localhost //登陆发送请求 export const loginUser = (userData,history)= ...