Cocos2d-x 引擎概要
游戏开发技术
- 游戏原理与机制
- 游戏开发技术
- 认识Cocos2D-X
游戏原理与机制
- 渲染驱动
- 事件驱动
渲染驱动游戏
例如:愤怒的小鸟
游戏的实现原理:在不同时间片段中绘制不同画面
代码片段
// 绘制画面
drawMenu(); // 绘制游戏主菜单画面
drawGame(); // 绘制游戏中画面
drawOver(); // 绘制游戏结束画面// 不同状态渲染不同画面
draw(){while(isExit){if(isState==MENU){drawMenu(); }else if(isState==GAME){drawGame();}else if(isState==OVER){drawOver();}}
}// 游戏事件处理函数
event(){isState==MENU;
}
游戏归根到底是绘制渲染
渲染驱动游戏重要指标,帧率(FPS, Frame Per Second)。
- 每秒刷新(绘制/渲染)次数
- 延时机制
事件驱动游戏
例如:象棋游戏或者是棋牌类游戏
drawMenu();
drawGame();
drawOver();// 事件处理函数
event(){if(isState==MENU){drawMenu();}else if(isState==GAME){drawGame();}else if(isState==OVER){drawOver();}
}
游戏开发技术
- 各平台游戏开发技术
- 跨平台游戏开发方案
游戏开发技术平台差异
- Win32游戏开发技术:例如CS,常见图形渲染方式
- Software 软件加速
- DirectX(DX、D3D),硬件加速,微软产品
- OpenGL,硬件加速,开源产品
- Android游戏开发技术:例如贪吃蛇,常见图形渲染方式
- Skia/Canvas
- OpenGL ES,适用于嵌入式设备,对OpenGL进行了简化。
- NDK,Android中使用C或C++开发模块,即在Java中调用C/C++接口。
- MAC/iOS游戏开发技术:例如国际象棋,常见图形渲染方式
- Quartz2D
- OpenGL ES
- Linux游戏开发技术
- OpenGL
- WP7游戏开发技术: Window Phone是微软Windows Mobile过渡而来
- DirectX
- Win8/WP8游戏开发
- DirectX
跨平台游戏开发技术方案
- HTML5: Canvas/WebGL
- Unity3D: OpenGL,商业游戏引擎,不能跨Microsoft平台。
- Cocos2d-x: OpenGL ES/DirectX/Canvas
认识Cocos2D-X引擎
- Cocos2D-X跨平台解决方案
- Cocos2D-X版本选择
- Cocos2D-X功能模块
- Cocos2D-X数据结构
Cocos2D-X跨平台解决方案
- app:Android、iOS、Win8
- view、event:OpenGL 渲染视图
- screen、layer、touch/key: Cocos2d-x 场景、图层、触屏/按键
Cocos2D-X 版本选择
- Cocos2d python
- Cocos2d iphone
- SherryCocos、CocosNet、cocos2d-android、cocosCore、cocos2d-x(cocos2d-lua、cocos2d-html5)、cocos2d-javascript
根据图形标准划分
- OpenGL ES 1.x
- OpenGL ES 2.x
- DirectX 11.1
- DirectX 10
Cocos2D-X功能模块
- Cocos2D-X主体: OpenGL ES、DirectX、Canvas、pthread(多线程)
- 开源二维物理引擎:Box2D、Chipmunk
- 网络通信(非实时libcurl、实时BSD Socket)、声音引擎(SimpleAudioEngine)
Cocos2D-X数据结构
- CCCopying 复制对象类(接口)
- CCObject 对象类
- CCZone 空间类
- CCData 数据类
- CCGeometry 几何类
- CCSet 集合类
- CCArray 数组类
- CCString 字符串类
- ccTypes.h 类型
- STL
- vector
- list
- stack
- queue
- map
Cocos2D-X 跨平台环境搭建
软件需求
- Win /Linux/MAC
- JDK
- Eclipse
- ADT
- CDT
- Android SDK
- Andriod NDK
$ python -V
Python 2.7.13
Win10安装VS2015
win32环境搭建
实例软件:Cocos2d-x 3.10 Lua
-- 下载安装并更新
$ git clone https://github.com/cocos2d/cocos2d-x.git
$ cd cocos2d-x && python download-deps.py
$ git submodule update --init
-- 创建项目
$ ./setup.py
$ source FILE_TO_SAVE_SYSTEM_VARIABLE
$ cocos new ProjectName -p com.company.game -l lua -d NEW_PROJECTS_DIR
$ cd NEW_PROJECTS_DIR/ProjectName
快速入门
- 游戏生命周期
- 编译运行调试
应用程序生命周期
一个游戏对应一个Application
对象,Application
职责是管理游戏生命周期并设置默认游戏窗口,获取平台及本地化信息。Cocos2D-X通常不直接创建Application
对象,Cocos2d-x脚本创建应用程序时会实现一个Application
的子类供程序员自行定义生命周期的各个阶段的处理,这个子类即AppDelegate
。
#ifndef _APP_DELEGATE_H_
#define _APP_DELEGATE_H_#include "cocos2d.h"/**AppDelegate是一个应用程序委托对象,作用是程序启动时调用它。*/
class AppDelegate : private cocos2d::Application
{
public:AppDelegate();virtual ~AppDelegate();virtual void initGLContextAttrs();/**游戏启动后触发,一般进行游戏初始化。*/virtual bool applicationDidFinishLaunching();/**游戏退出到后台*/virtual void applicationDidEnterBackground();/**游戏从后台进入前台*/virtual void applicationWillEnterForeground();
};#endif
引擎框架
设计思想
导演
- shared CCDirector
- runWithScene
- replaceScene
- pushScene
- popScene
- pause
- resume
场景
图层
Layer
图层是处理玩家事件响应的Node
子类,包含的是直接在屏幕上呈现的内容, 它实现了触屏事件代理协议(TouchEventsDelegate
)。
Layer
图层的作用
- 接收用户的输入事件,包括触摸、加速度传感器、键盘输入等。
- 显示精灵、文本等游戏元素,并设置游戏元素的属性。
Layer
类主要函数
init()
初始化图层onEnter()
进入布景层时被调用onExit()
离开布景层被调用onEnterTransitionDidFinish()
过程动画结束时调用
节点
每个节点中都有一个摄像机
显示对象
-- 预加载图片
local img = cc.Director:getInstance():getTextureCache():addImage("logo.jpg")
-- 获取文件尺寸
local size = img:getContentSize()
print(size.width, size.height)-- 创建精灵并添加至当前场景中
display.newSprite(img):addTo(self):move(display.center)-- 创建图层
local layer = display.newLayer():addTo(self):move(100, 100)
local image = display.newSprite("head/head_1.png"):addTo(layer)
image:setAnchorPoint(cc.p(0, 0))
示例:显示隐藏节点
-- MainScene.lua
local MainScene = class("MainScene", cc.load("mvc").ViewBase)function MainScene:onCreate()-- 场景中添加背景图local bg = display.newSprite("bg.jpg"):move(display.center):addTo(self)-- 3秒后场景切换self:getScheduler():scheduleScriptFunc(function()local newScene = require("app.views.GameScene"):new()cc.Director:getInstance():replaceScene(newScene)end, 3, false)endreturn MainScene
-- GameScene.lua
local GameScene = class("GameScene", function()return display.newScene("GameScene")
end)function GameScene:ctor()local logoNode = require("app.views.LogoNode"):new():addTo(self):move(display.center)
endreturn GameScene
-- LogoNode.lua
local LogoNode = class("LogoNode", cc.load("mvc").ViewBase)function LogoNode:ctor()local logo1 = display.newSprite("logo1.png"):addTo(self)local logo2 = display.newSprite("logo2.png"):addTo(self)logo2:setVisible(false)-- invalid 'cobj' in function 'lua_cocos2dx_Node_isVisible'-- lua保存的node值相当于一个弱引用-- 在创建 Node节点后 调用父节点 retain() 方法 手动增加引用logo1:retain()logo2:retain()-- print(not logo1:isVisible(), not logo2:isVisible())self:getScheduler():scheduleScriptFunc(function() -- invalid 'cobj' in function 'lua_cocos2dx_Node_isVisible'logo1:setVisible(not logo1:isVisible());logo2:setVisible(not logo2:isVisible());end, 1, false)
endreturn LogoNode
动作
- Action基本使用
- Action特效
- 场景切换特效
Action的基本使用
- CCMoveTo 移动到
- CCMoveBy 移动
- CCJumpTo 跳跃到
- CCJumpBy 跳跃
- CCBezierBy 贝塞尔
- CCScaleTo 放大到
- CCScaleBy 放大
- CCRotateTo 旋转到
- CCRotateBy 旋转
- CCBlink 闪烁
- CCTintTo 色调变化到
- CCFadeTo 变暗到
- CCFadeIn 由无变亮
- CCFadeOut 由亮变无
-- MainScene.lua
local MainScene = class("MainScene", cc.load("mvc").ViewBase)function MainScene:onCreate()local img = display.newSprite("role.png"):addTo(self)img:move(display.center)img:setScale(1)img:setPositionX(100)-- 2秒,从左到右移动到-- img:runAction(cc.MoveTo:create(2, cc.p(display.width-100, display.cy)))-- 2秒,从左向右移动300像素-- img:runAction(cc.MoveBy:create(2, cc.p(-300, 0)))-- 执行顺序序列-- local fn1 = cc.MoveTo:create(2, cc.p(display.width-100, display.cy))-- local fn2 = cc.MoveBy:create(2, cc.p(-300, 0))-- img:runAction(cc.Sequence:create(fn1, fn2))-- 来回移动-- local fn1 = cc.MoveBy:create(2, cc.p(300, 0))-- error in function 'lua_cocos2dx_Action_reverse' argument #1 is '[no object]'; 'cc.Action' expected.-- local fn2 = fn1.reverse() --反转-- img:runAction(cc.Sequence:create(fn1, fn2))-- 并列执行-- local fn1 = cc.MoveBy:create(2, cc.p(400, 0))-- local fn2 = cc.ScaleTo:create(2, 2)-- img:runAction(cc.Spawn:create(fn1, fn2))-- 动画播放完的回调local fn1 = cc.MoveBy:create(2, cc.p(400, 0))local fn2 = cc.ScaleTo:create(2, 2)local fn3 = cc.Spawn:create(fn1, fn2)img:runAction(cc.Sequence:create(fn3, cc.CallFunc:create(function()print("play complete")end)))
endreturn MainScene
Action特效
- Shaky3D 抖动效果
- Waves3D 波浪效果
- FlipX3D 翻转效果
- Lens3D 凸镜效果
- Ripple3D 水波效果
- Liquid 液体效果
- Twirl 扭转效果
- ShatteredTiles3D 破碎效果
- ShuffleTiles 瓷砖效果
- FadeOutTRTiles 淡入淡出
- TurnOffTiles 方块消失
- SplitRows 分页消失
- PageTurn3D 翻页效果
-- MainScene.lua
local MainScene = class("MainScene", cc.load("mvc").ViewBase)function MainScene:onCreate()local nodeGrid = cc.NodeGrid:create()nodeGrid:addChild(display.newSprite("role.png"))nodeGrid:move(display.center)nodeGrid:setScale(1, 1)nodeGrid:addTo(self)-- 震动效果-- nodeGrid:runAction(cc.Shaky3D:create(10, cc.size(50, 50), 5, false))-- 瓦片式抖动-- nodeGrid:runAction(cc.ShakyTiles3D:create(10, cc.size(50, 50), 5, false))-- 爆炸碎片效果-- nodeGrid:runAction(cc.ShuffleTiles:create(1, cc.size(50, 50), 5))-- 碎片消失-- nodeGrid:runAction(cc.TurnOffTiles:create(1, cc.size(100, 100)))-- 波浪效果-- nodeGrid:runAction(cc.Waves3D:create(2, cc.size(15, 10), 5, 40))-- 波浪效果后回到初始状态local waveRun = cc.Waves3D:create(2, cc.size(15, 10), 5, 40)local waveInit = cc.Waves3D:create(2, cc.size(15, 10), 0, 0)nodeGrid:runAction(cc.Sequence:create(waveRun, waveInit))-- 先抖动后爆炸
-- local shaky = cc.ShakyTiles3D:create(1, cc.size(50, 50), 5, false)
-- local shuffle = cc.ShuffleTiles:create(0.5, cc.size(50, 50), 25)
-- nodeGrid:runAction(cc.Sequence:create(shaky, shuffle))
endreturn MainScene
Cocos2d-x 引擎概要相关推荐
- 为什么Cocos2D开源引擎最适合游戏创业团队?
http://www.csdn.net/article/2012-10-09/2810603-wangzhe-cocos2d Cocos2D王哲MDCC 摘要:Cocos2D-X核心开发者王哲认为,只 ...
- Cocos2D开源引擎最适合游戏创业团队
[由CSDN和创新工场联合举办的"移动开发者大会•中国2012"将于2012年10月19-20日在国家会议中心举办.移动开发者大会(MDCC)是中国最大规模的移动开发者顶级盛会,历 ...
- 【iOS-cocos2d游戏引擎开发之一】搭建cocos2d游戏引擎环境,创建第一个HelloWorld!...
最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...
- 【COCOS2D-HTML5 开发之一】新建HTML5项目及简单阐述与COCOS2D/X引擎关系
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d-html5/1463.htm ...
- Chrome浏览器及V8引擎概要
背景 2020年在eBay大数据团队做可视化项目时,除了后端的spark和java,还需要负责前端数据可视化页面的定制,这就需要前端知识了,包括但不限于:webpack.chrome.js引擎.那时候 ...
- gamebryo游戏引擎概要
编者按:引擎在游戏研发中起着重要的作用,很多开发人员在选择游戏引擎过程中会事先做一些了解.这期我们向大家简单介绍Gamebryo引擎的一些情况,以后,我们将为大家带来更多有关游戏引擎方面的介绍. 前言 ...
- python 游戏引擎 cocos2d_2.2 完成一个Cocos2d游戏程序代码
本视频基于**Python 3.6版本 Python语言之所以受欢迎,很大的原因是有很多可以使用的库,Python社区也有很多游戏开发库,其中较为优秀有:Cocos2d.Pyglet和Pygame,还 ...
- 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁
2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...
- 添加类iOS cocos2d 2游戏开发实战(第3版)
这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...
- iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!
2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...
最新文章
- 苹果 开发者账号区别
- Ubuntu apt安装/卸载软件和设置软件源
- 凸透镜成像动画可拖动_经典四图八问!这道中考物理题,彻底解决凸透镜成像规律!...
- 使用python进行面部合成,比PS好用多了
- linux操作命令comm,Linux
- 875. Koko Eating Bananas
- mysql 的命名管道_SQL Server中的命名管道(named pipe)及其使用
- 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等...
- 上海阅文集团android面试题,2018年阅文集团PHP工程师面试题分享
- matlab 矩阵jocobi迭代_计算方法实验指导书1 -
- 微信小程序事件绑定无效
- 匈牙利算法及KM算法详解
- 小程序微信JSAPI支付进行退款操作
- base64编码和解码算法
- 墨尔本大学 SWEN20003 Project2 课业解析
- android前置录像,Android Camera2video使用前置摄像头(Android Camera2video use front camera)
- icom对讲机写频线定义_哈罗CQ火腿社区 - QRP and DIY - 各种写频线的资料,放上来备用吧 - Powered by phpwind...
- 电脑启动快捷键一览表
- 华为张小军:期待区块链应用落地,加速推进区块链产业商用 | FBEC 2019
- 转:typedef的用法