【Cocos2d入门教程二】Cocos2d-x基础概念
上一章已经学习了环境的搭建。这一章对基础概念进行掌握。内容大概有:
1.导演
2.场景
3.节点
4.层
4.精灵
1.导演(Director)
导演存在的主要作用:
环境设定(帧率 初始化openGl和渲染器)
场景管理
执行主循环
游戏就是个死循环 不断不断的渲染 就跟视频没两样 一帧一帧的绘制出来 话说提一下一帧为1/60秒 也就是说coco里一秒渲染60次
导演的管理: 计时器 事件管理器 动作管理器
导演继承于REF 一个单例类
获得导演类Director实例语句
auto director = Director :: getInstance();
2.场景(Scene)
Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变换舞台和场地一样。场景的一个重要的作用就是流程控制的作用,我们可以通过Director的一系列方法控制游戏中不同的场景的自由切换。
下面是Director控制场景的常用方法:
runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。
pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;
replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用
end() 释放和终止执行场景,同时退出应用
pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上
同时场景是层的容器,包含了所有需要显示的游戏元素。通常,当我们需要完成一个场景时候,会创建一个Scene的子类,并在子类中实现我们需要的功能。比如,我们可以在子类的初始化中载入游戏资源,为场景添加层,启动音乐播放等等。
3.Node节点
Cocos2d-x的核心类实例都是一个节点,这些类是以树状结构继承的,他们的基类都是Node。
Node主要特征,它可以包含其他继承于Node节点例如层、精灵等,可以设置定期回调函数,可以执行动作。
Node继承自Ref类。
4.层(Layer)
Layer是的Node节点的子类。层包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后,只需要把层按照顺序添加到场景中就可以显示出来了。要向场景添加层,我们可以使用addChild方法。
addChild( Node child )addChild( Node child, int zOrder ) addChild( Node *child, int zOrder, int tag )
其中,Child参数就是节点。对于场景而言,通常我们添加的节点就是层。先添加的层会被置于后添加的层之下。如果需要为它们指定先后次序,可以使用不同的zOrder值。tag是元素的标识号码,如果为子节点设置了tag值,就可以在它的父节点中利用tag值就可以找到它了。层可以包含任何Node作为子节点,包括Sprites(精灵), Labels(标签),甚至其他的Layer对象。
5.精灵(Sprite)
创建精灵的几种方式:
直接创建:
12auto
sprite = Sprite::create(
"HelloWorld.png"
);
this
->addChild(sprite,0);
使用纹理来创建精灵
12auto
sprite1 = Sprite::createWithTexture(TextureCache::getInstance()>addImage(
"HelloWorld.png"
));
this
->addChild(sprite1, 0);
使用精灵帧来创建精灵
12auto
sprite2=Sprite::createWithSpriteFrameName(
"HelloWorld.png"
);
this
->addChild(sprite2, 0);
精灵创建的过程:
//创建Sceneauto scene = Scene::create();//创建层auto layer = HelloWorld::create();//把层加入场景中scene->addChild(layer);//创建一个精灵auto sprite = Sprite::create("HelloWorld.png");//把精灵加到层里layer->addChild(sprite, 0);
精灵创建的底层源码(这部分如果看不懂的可以忽略过):
从精灵帧中寻找这个图片,如果找不到则编译器会直接崩掉
下面为四者关系的基本架构图:
对刚开始感觉有点不理解也实属正常,先大体知道它们的主要是什么就行了。后来慢慢的会了解 。
转载于:https://blog.51cto.com/advances/1682475
【Cocos2d入门教程二】Cocos2d-x基础概念相关推荐
- Linux命令入门教程(二):目录基础篇
2.1 目录及路径基础介绍 在linux中,目录(directory)通常也可表述为路径,一般不叫文件夹. 文件系统中,目录树的起点为根目录,任何路径都能以根目录来寻址. 以"/" ...
- python elasticsearch 入门教程(二) ---全文搜索
python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...
- R语言七天入门教程二:认识变量与运算符
R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...
- (转)tensorflow入门教程(二十六)人脸识别(上)
https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...
- CG插画入门教程之人体动态基础与面部画法分析
CG插画入门教程之人体动态基础与面部画法分析第一章:人体动态的画法分析与技巧讲解视频地址:https://www.qingwk.com/course/detail/10 章节1:人体动态的画法分析与技 ...
- 【Android开发教程】一、基础概念
Android操作系统 Android是一个基于Linux.使用java作为程序接口的操作系统.他提供了一些工具,比如编译器.调试器.还有他自己的仿真器(DVM - Dalvik Virtual Ma ...
- “.NET研究”【Android开发教程】一、基础概念
Android操作系统 Android是一个基于Linux.使用java作为程序接口的操作系统.他提供了一些工具,比如编译器.调试器.还有他自己的仿真器(DVM - Dalvik Virtual Ma ...
- Linux pwn入门教程,i春秋linux_pwn入门教程复现之栈溢出基础
i春秋linux_pwn入门教程复现之栈溢出基础 演示进程总览 1: main函数 2: hello函数 3: getShell函数 函数的入栈和出栈 1: F2断点于call hello 启动IDA ...
- NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
NumPy 快速入门系列:应用统计学基础概念.相关统计指标与NumPy的实现 前言: 统计学导论: 统计学定义: 统计学分类: 统计学基本概念: 统计过程: 统计指标与NumPy: 用 Python ...
最新文章
- javascript 异步实现方案
- boost::contract模块实现sum的测试程序
- C++ 的基础概念(3)——多态详解。
- 使用Spring Cloud Config作为外部化配置
- win7计算机右键属性桌面进程重启,win7计算机右键属性打不开怎么办
- libiconv库简单裁剪支持CP437编码
- 解决开ServiceHost时候System.PlatformNotSupportedException: Operation is not supported on this platform.
- docker harbor 域名_Docker镜像仓库Harbor部署
- 如何用c++画图_看 FILA 与白山如何用经典黑白演奏不一样的C大调!
- [Swift]SwiftyJSON的使用:解析JSON
- 清明:直面骄阳、向死而生
- 30分钟了解PAC学习理论——计算学习理论第一讲
- #93 高精度除低精度
- matlab polyfit 拟合度,Matlab中polyfit和regress
- Android笔记:浅析Android电视APP开发
- Springboot 使用管道设计模式 , 实践案例玩一玩
- Tomcat启动报错 More than one fragment with the name [spring_web] was found. This is not legal with relat
- MinkowskiEngine安装问题
- UI自动化框架思路整理(Python+selenium+unittest+html)
- git中merge,rebase,cherry-pick,patch的联系与区别