0%

场景图

同电影类似,游戏中也需要一个个场景(Scene),显示图片和动画在屏幕上,展示给玩家观看。Cocos2d-x 引擎中也抽象出来一个场景的概念。

场景图(Scene Graph)是一种安排场景内对象的数据结构,它把场景内所有的 节点(Node) 都包含在一个 树(tree) 上。(场景图虽然叫做”图”,但实际使用一个树结构来表示)。

例如《超级马里奥兄弟》中的著名场景 World 1-1:

场景结构可能是:

阅读全文 »

列举了一些 Cocos2d-x 框架的技术备忘录,基于 Cocos2d-x v3.16 和 Lua 5.1.5。

框架架构

导演 (Director)

  • 单例类,负责创建并管理主窗口,场景切换,暂停恢复游戏运行,游戏主循环等。例如:
1
2
3
4
5
6
Director* director = Director::getInstance();
director->runWithScene(Scene::create());
director->pushScene(Scene::create());
director->popScene();
director->replaceScene(Scene::create());
Scene* scene = director->getRunningScene();
1
2
3
4
5
6
local director = cc.Director:getInstance()
director:runWithScene(cc.Scene:create())
director:pushScene(cc.Scene:create())
director:popScene()
director:replaceScene(cc.Scene:create())
local scene = director:getRunningScene()
  • 挂载一些全局变量,例如: TextureCacheSchedulerEventDispatcherRenderer 等。
1
2
3
4
5
Director* director = Director::getInstance();
TextureCache* textureCache = director->getTextureCache();
Scheduler* scheduler = director->getScheduler();
EventDispatcher* eventDispatcher = director->getEventDispatcher();
Renderer* renderer = director->getRenderer();
1
2
3
4
local director = cc.Director:getInstance()
local textureCache = director:getTextureCache()
local scheduler = director:getScheduler()
local eventDispatcher = director:getEventDispatcher()
  • 其他:
    • 设置 OpenGLView,投影模式,视窗大小等。
    • 设置缩放系数 contentScaleFactor
    • 设置帧率 FPS :setAnimationInterval(float interval)
阅读全文 »

列举了一些 Lua 项目开发中的技术备忘录,基于 Cocos2d-x v3.16 和 Lua 5.1.5。

Lua 风格 API

  • 借鉴了 quick-cocos2d-x 中的 Lua 风格 API,( quick-cocos2d-x 目前已被 Cocos2d-x 官方弃用)。
  • 对常用的变量或者方法进行缩写封装。例如:
Lua
1
2
3
4
5
6
7
d = display
function d.node()
return cc.Node:create()
end
function d.sprite()
return cc.Sprite:create()
end
  • 方法最后返回 self ,形成链式调用方法。例如:
Lua
1
2
3
4
5
6
7
8
9
10
function Node:pos(x, y)
-- ...
return self
end
function Node:addTo(parentNode, z, name)
-- ...
return self
end
-- e.g.
local node = d.node():pos(100, 100):size(100, 100):scale(2):addTo(parentNode)
  • 使用 IntelliJ IDEA + EmmyLua,Cocos2d-x 可用此 API 提示库 生成更详尽的代码补全。
阅读全文 »

题目描述

现在你总共有 n 门课需要选,记为 0n-1

在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]

给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。

可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。

示例 1:

1
2
3
输入: 2, [[1,0]] 
输出: [0,1]
解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。

示例 2:

1
2
3
4
输入: 4, [[1,0],[2,0],[3,1],[3,2]]
输出: [0,1,2,3] or [0,2,1,3]
解释: 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3] 。

说明:

  1. 输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法
  2. 你可以假定输入的先决条件中没有重复的边。

提示:

  1. 这个问题相当于查找一个循环是否存在于有向图中。如果存在循环,则不存在拓扑排序,因此不可能选取所有课程进行学习。
  2. 通过 DFS 进行拓扑排序 - 一个关于Coursera的精彩视频教程(21分钟),介绍拓扑排序的基本概念。
  3. 拓扑排序也可以通过 BFS 完成。
阅读全文 »

列举了一些 Cocos2d-x Lua 项目客户端开发的技术备忘录。

Cocos2d-x 框架

  • 基本概念:导演、精灵、动作、动画、粒子特效、场景转换、事件、文件 IO、数据持久化、骨骼动画
  • C++ API
  • C++ 到 Lua 绑定
  • 库工程框架
  • 跨平台工程:iOS、Android

Lua项目框架

  • Lua API 扩展
  • 平台交互:登录、支付、分享
  • UI 框架
  • 代码热更新
  • 网络请求: Socket、HTTP
  • 多语言
  • 配置文件
    阅读全文 »