游戏开发技术

  • 游戏原理与机制
  • 游戏开发技术
  • 认识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 数据结构

Cocos2D-X 跨平台环境搭建

Cocos2D-X 跨平台环境搭建

软件需求

  • Win /Linux/MAC
  • JDK
  • Eclipse
  • ADT
  • CDT
  • Android SDK
  • Andriod NDK
$ python -V
Python 2.7.13

Win10安装VS2015

image.png
image.png

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
git克隆
-- 创建项目
$ ./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 引擎概要相关推荐

  1. 为什么Cocos2D开源引擎最适合游戏创业团队?

    http://www.csdn.net/article/2012-10-09/2810603-wangzhe-cocos2d Cocos2D王哲MDCC 摘要:Cocos2D-X核心开发者王哲认为,只 ...

  2. Cocos2D开源引擎最适合游戏创业团队

    [由CSDN和创新工场联合举办的"移动开发者大会•中国2012"将于2012年10月19-20日在国家会议中心举办.移动开发者大会(MDCC)是中国最大规模的移动开发者顶级盛会,历 ...

  3. 【iOS-cocos2d游戏引擎开发之一】搭建cocos2d游戏引擎环境,创建第一个HelloWorld!...

    最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...

  4. 【COCOS2D-HTML5 开发之一】新建HTML5项目及简单阐述与COCOS2D/X引擎关系

    本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d-html5/1463.htm ...

  5. Chrome浏览器及V8引擎概要

    背景 2020年在eBay大数据团队做可视化项目时,除了后端的spark和java,还需要负责前端数据可视化页面的定制,这就需要前端知识了,包括但不限于:webpack.chrome.js引擎.那时候 ...

  6. gamebryo游戏引擎概要

    编者按:引擎在游戏研发中起着重要的作用,很多开发人员在选择游戏引擎过程中会事先做一些了解.这期我们向大家简单介绍Gamebryo引擎的一些情况,以后,我们将为大家带来更多有关游戏引擎方面的介绍. 前言 ...

  7. python 游戏引擎 cocos2d_2.2 完成一个Cocos2d游戏程序代码

    本视频基于**Python 3.6版本 Python语言之所以受欢迎,很大的原因是有很多可以使用的库,Python社区也有很多游戏开发库,其中较为优秀有:Cocos2d.Pyglet和Pygame,还 ...

  8. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  9. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

  10. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

最新文章

  1. 苹果 开发者账号区别
  2. Ubuntu apt安装/卸载软件和设置软件源
  3. 凸透镜成像动画可拖动_经典四图八问!这道中考物理题,彻底解决凸透镜成像规律!...
  4. 使用python进行面部合成,比PS好用多了
  5. linux操作命令comm,Linux
  6. 875. Koko Eating Bananas
  7. mysql 的命名管道_SQL Server中的命名管道(named pipe)及其使用
  8. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等...
  9. 上海阅文集团android面试题,2018年阅文集团PHP工程师面试题分享
  10. matlab 矩阵jocobi迭代_计算方法实验指导书1 -
  11. 微信小程序事件绑定无效
  12. 匈牙利算法及KM算法详解
  13. 小程序微信JSAPI支付进行退款操作
  14. base64编码和解码算法
  15. 墨尔本大学 SWEN20003 Project2 课业解析
  16. android前置录像,Android Camera2video使用前置摄像头(Android Camera2video use front camera)
  17. icom对讲机写频线定义_哈罗CQ火腿社区 - QRP and DIY - 各种写频线的资料,放上来备用吧 - Powered by phpwind...
  18. 电脑启动快捷键一览表
  19. 华为张小军:期待区块链应用落地,加速推进区块链产业商用 | FBEC 2019
  20. 转:typedef的用法

热门文章

  1. 基于jsp(java)学生成绩管理系统的设计和实现
  2. 分享5篇计算机专业毕业设计论文
  3. 三角波fft的c语言程序设计,dsp的fft实现设计报告.docx
  4. uos系统安装教程_统一操作系统UOS下载&安装图文教程:尝鲜记(一)
  5. 网络工程制图论文计算机,计算机工程制图设计分析论文
  6. vue 一直显示数据加载中的解决方案之一
  7. Nfine框架基本使用--初学者的总结
  8. E-prime基本介绍
  9. 硬件设计40之什么是I2S、PCM、MP3?
  10. 小米3g刷高格固件_不走弯路:小米路由器3G 刷Padavan固件简单教程