自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 【cocos2d-x 源码解析】事件系统

事件是一个“数据体”,由事件类型和携带的数据组成。事件监听器是“处理事件的人”,其存储了相应事件的回调函数,当事件触发时,这些回调函数就会被调用。事件派发器是一个“事件管理者”,它有两个作用,注册事件监听器和派发事件;注册事件监听器就是给监听器关联一个回调函数,派发事件就是找到事件类型对应的监听器,调用其回调函数。事件触发的过程就是事件派发器将事件传给事件监听器,执行事件监听器的回调函数。

2018-01-18 11:46:22 875

转载 【Markdown】markdown 输入数学符号

^ 表示上标, _ 表示下标,如果上标或下标内容多于一个字符,则使用 {} 括起来

2017-11-14 11:29:39 36542 2

原创 【Markdown】markdown 基础用法

html 中的 & 和 < 为特殊字符,要插入这两个字符分别得用 \& \< 来表示,而在 Markdown 中则不需特殊处理区块元素段落和换行段落不要有缩进换行先按两个空格再按回车

2017-11-14 11:24:05 588

原创 【cocos2d-x 源码解析】创建 OpenGL 环境

cocos2d-x 是基本 OpenGL 实现的,所以游戏启动之后做的第一件事就是创建 OpenGL 上下文,之后才能进行渲染。在 win32 上,创建 OpenGL context 的过程就是创建一个 OpenGL 窗口,cocos2d-x 使用的是 glfw 库

2017-10-27 15:12:40 1869 1

原创 【cocos2d】使用 shader

使用内置 shader 非常简单,直接通过一个 key 值从 GLProgramCache 缓冲区取到一个 GLProgram,然后设置给 Node 即可;默认 shader 的 key 值在 GLProgram 中定义

2017-10-27 15:06:17 4648

原创 【cocos2d-x】使用 tolua 导出自定义 c++ 类

cocos 目录是 cocos2d-x 引擎的源码(C++),其中 lua-bindings 目录下是导出的脚本语言,包括 js 和 lua;在 lua-bindings 下有个 auto 文件夹,这就是 tolua 生成文件存放的地方。tools 目录下是 cocos2d-x 非常实用的一些工具,包括创建项目、编译项目、运行项目的控制台命令等

2017-10-13 15:43:35 1955

原创 【cocos2d-x 源码解析】shader 实现

cocos2d-x 通过 GLProgram,GLProgramCache,GLProgramState 和 GLProgramStateCache 这几个类来管理着色器程序。GLProgram 完成顶点着色器 vertex shader 和 片段着色器 fragment shader 的创建、编译、附加和链接,最后生成一个着色器程序 program;GLPorgramState 是对 GLProgram 的再次封装

2017-10-13 14:37:19 1818 1

原创 【cocos2d-x 源码解析】可滚动容器

UIScrollView 继承自 UILayout,其内部添加了一个容器 m_pInnerContainer,这也是一个 UILayout,所有添加到 UIScrollView 的控件都是添加在这个子容器 m_pInnerContainer 上。UIScrollView 默认注册了触摸事件,拖动 UIScrollView 时移动的是 m_pInnerContainer 容器,这样添加到滚动面板上的所有控件都会同步进行

2017-10-13 14:27:09 1064

原创 【cocos2d-x 源码解析】帧动画

帧动画是以序列帧轮放的方式来表现一个动画,就像胶片电影一样,一张张画面进行切换,当切换的间隔足够小时,人眼就看不出中间的间隔,而是一个流畅的视频。cocos2d-x 中的帧动画涉及到三个类 AnimationFrame,Animation 和 Animate。

2017-10-13 14:23:31 1026

原创 【lua】使用 tolua 实现 lua 与 c++ 交互

tolua 也叫 tolua++,是一个第三方库,简化了 lua 访问 c/c++ 的工作。tolua 自动导出 c/c++ 中的常量、变量、函数、类等,提供给 lua 直接访问和调用。lua 与 c 是可以直接相互访问的,不使用 tolua 或其它第三方库也可以实现 lua 调用 c/c++,但比较麻烦,开发效率太低。

2017-09-29 21:22:26 5361 1

原创 【quick-cocos2d-x】动画和粒子

帧动画需要一组的图片序列,用于创建精灵帧,一般是先将图片加载到精灵帧缓冲区,然后创建动画的时候再从缓冲区取

2017-09-27 17:50:37 881

原创 【cocos2d】从 cocos2d-x 到 quick

quick 是对 cocos2d-x lua 版本的一次再次封装,cocos2d-x 中的东西到了 quick 上面基本都能用。这篇文章主要讲从 cocos2d-x 转到 quick 需要注意的一些东西。

2017-09-27 17:44:12 1466

原创 【OpenGL】着色器 Shader

使用可编程管线需要用到“着色器”,也就是大名鼎鼎的 shader。着色器是运行在 GPU 中的,opengl 提供了一门着色器语言 GLSL,即 opengl shader language,还提供了相应的编译器,shader 程序必须编译后才能在 GPU 上运行。

2017-08-18 23:50:39 860

原创 【OpenGL】绘制三角形

绘制三个点上一节我们已经成功绘制出了一个点,那如何绘制三个点呢?很简单,给 VBO 填充数据时填充三个点的数据

2017-08-17 11:18:32 590

原创 【OpenGL】绘制一个点

OpenGL 渲染是基于状态(state)的。OpenGL context 是一个重要的概念的,只有创建了 context,OpenGL 才存在,context 一旦被销毁了,OpenGL 就不存在了。context 存储了一个 OpenGL 实例的所有状态,类似于一个程序开辟的所有内存空间。context 可以看作进程在操作系统中的一个执行过程

2017-08-17 11:15:20 12708

原创 【cocos2d-x 源码剖析】启动窗口

不仅游戏,任何程序都必须有一个启动的入口;几乎每个程序员接触编程的第一个程序都是 HelloWorld 控制台程序,这个最简单的程序的入口就是 Main 函数。接下来就让我们看看 cocos2d-x 创建的游戏是从哪里开始启动的,这里只探讨 win32 程序,其它平台以后有时间再探讨。

2017-08-16 17:10:26 516

原创 【Linux】重定向

回顾计算机经典的冯诺依曼结构,计算机的组成包括运算器、控制器、存储器、输入设备和输出设备。常见的输入设备有键盘、鼠标、扫描仪等,常见的输出设备有显示器、蜂鸣器、打印机等;linux 系统通常以键盘为默认输入设备,称为标准输入设备,以显示器为默认输出设备,称为标准输出设备。重定向是指将原本应由标准输入设备输入的数据,改由其它文件或设备输入;原来应该输出到标准输出设备的数据,改为输出到其它文件或设备。

2017-08-14 16:36:43 604

原创 【OpenGL】 创建窗口

opengl 标准并没有提供用于创建和管理窗口的 api,各个主流操作系统都提供了支持 opengl 的接口,x 系统提供的接口叫做 GLX,windows 提供的接口叫 WGL,mac 系统提供的接口叫做 CGL。我们可以使用 opengl 的一个工具库 glut(opengl utility toolkit)来管理窗口,处理事件,IO 控制和其它设备管理。

2017-08-13 10:27:09 2336 1

原创 Cocos2d-x 之性能检测

cocos2d-x 中有三个跟 OpenGL 相关的性能指标,游戏运行时显示在左下角;cocos2d-x 默认会显示这些性能指标,可以手动在代码在开启或关闭

2017-08-10 11:18:10 2925

原创 shell 实例之文件操作

% 是右适配符,从右向左开始适配,然后把适配到的内容删掉。取文件的文件名,需要把文件后缀名和 . 去掉,所以适配符应该写 .*,这样就能匹配到 .后缀名 并将其删掉。# 是左适配符,从左向右开始适配,然后把适配到的内容删掉。取文件的后缀名,需要把文件名和 . 去年,所以适配符应该写 *.,这样就能匹配到 文件名. 并将其删掉。% 和 # 是非贪婪操作符,找到第一个适配的字符串就停止查找。而 %% 和 ## 是贪婪

2017-08-10 10:24:42 407

原创 Cocos2d-x 之使用 TexurePacker+Cocos Studio 协同工作

Cocos Studio 是 cocos2d-x 一个比较好用的编辑器,我们常用它来搭建场景 UI,导出场景文件和资源,然后在代码中直接加载场景文件。一般导出场景文件的时候会连同资源一起导出,场景文件保存了资源的读取方式,游戏启动时会根据这个读取方式正确找到资源并加载。将小图片打包成一张大图片,导出合图和 plist 文件,然后在程序中加载 plist 文件是一种比较常见和可行的方法。

2017-08-04 20:44:11 3634 1

原创 shell 脚本编程之函数

函数的定义很简单,可以看到和 c 语言的函数定义方式很相似。function 关键字可以省略,省略之后的函数定义跟 c 语言相比就是少了函数返回类型而已。函数调用就更简单了,直接写函数名即可。

2017-08-04 10:39:49 299

原创 shell 脚本编程之循环语句

break 和 continue 的意义和 c 语言一样,break 用于结束整个循环,continue 用于跳过本次循环。但 shell 的 break 和 continue 有一个很强大的地方就是可以带上一个数字,表示作用于哪一层循环。默认不带数字表示作用于 break 或 continue 所在的那一层循环。break 2 表示直接跳出 break 外面的那一层循环。

2017-08-04 10:11:06 712

原创 shell 脚本编程之条件语句

case 结构相当于 C 语言中的 switch 语句,要注意的是每个分支后面要加两个分号,分号和命令之间要有空格;条件后面加一个括号,default 分支用一个 * 表示;结束关键字为 esac,刚好是 case 反过来写,if 结束关键字也是 if 反过来写,这点比较奇葩。

2017-08-04 10:04:25 258

原创 shell 脚本编程之逻辑运算符

和大多数语言一样,shell 的逻辑运算符有与或非三种,不同的是 shell 有两套逻辑运算符。

2017-08-01 18:58:58 1297

原创 shell 脚本编程之比较运算符

测试是用于判断某个条件是否成立,比如测试某个文件是否存在,测试两个字符串是否相等。要特别注意的是,shell 中返回 0 代表测试成功;条件语句、循环语句等结构经常会以“真假”为判断条件,shell 用字符串 true 来表示真,但对于测试来说返回 0 才表示真。这里可能有点绕,其实不用太在意 0 或者非 0 ,只需要知道以 “真” “假” 作为判断条件即可。

2017-08-01 18:56:53 554

原创 shell 脚本编程之算术运算符

shell 的算术运算符只支持整数,浮点数的运算结果会被转换成整数。算术运算符包括 + - * \ % **(幂运算) += -= *= \= %= ++ – <<(位左移) >>(位右移) &(按位与) |(按位或) ^(按位异或) ~(按位非)。使用 let “expression” 的方式将运算的结果保存到变量中。

2017-08-01 18:50:23 712

原创 shell 脚本编程之引用

shell 中字符分为两种,一种是普通字符,另一种是元字符(meta)。元字符是 shell 的保留字符,在 shell 中有着特殊的意义。引用是指将字符串用某种符号括起来,以防止特殊字符被解析成其它意思。shell 中有四种引用符,用双引号,单引号,反引号和转义字符。

2017-07-31 17:55:48 527

原创 shell 脚本编程之变量

Shell 是指一种命令行解释器,为用户和操作系统之间进行通信提供一种接口,它接受来自用户的命令,并将其转换成一系列的系统调用送到内核执行,并将结果输出给用户。Shell 不仅是一种解释器,还是一种编程工具,脚本语言。Shell 有很多种,本系列文章只介绍 Bash Shell。变量命名Shell 的变量命名和大多数语言一样,由字母,数字和下划线组成,第一个字符只能是字母或下划线。

2017-07-31 17:35:52 470

原创 使用 TexturePacker 进行资源加密

TexturePacker 可以导出的图片格式有很多种,除了常见的 png,jpg,bmp,ttif,tga 之外,还可以导出 pvr,pvr+gzip(pvr.gz),pvr+zlib(pvr.ccz)。pvr 是 ios 上常用的一种图片格式,iOS 设备用的是 PowerVR 显示芯片,而 PVR 格式可以被该显示芯片直接存取,从而速度更快。

2017-07-31 14:10:48 2190

原创 Cocos2d-x 之 lua 代码加密

lua 代码加密方式很很多种,这里只讲最简单的一种,就是把代码编译成二进制字节码。lua 是一门脚本语言,不需要经过编译就可以使用 lua 解释器来执行;但我们也可以把 lua 代码事先编译成二进制文件,这样就达到了加密的方式。

2017-07-28 18:34:21 692

原创 Lua 之使用 VS 生成解释器、编译器和链接库

lua 是开源的,我们可以从官网下载源代码,其源代码是用纯 c 写的,因此如果想要在 c 项目中嵌入 lua 代码很简单,只需要把 lua 的源代码包含到 c 项目里面即可。但这肯定不是最好的方式,更好的方式是把 lua 源代码编译成链接库,要使用的时候直接包含链接库和必要的头文件即可。

2017-07-28 15:03:48 3049 2

原创 使用 TexturePacker 打包图片

安装 TexturePacker 命令行工具打开 TexturePacker,点击 File 菜单栏下面的 Install Command Line Tool 菜单项;在 Mac 下会弹出安装提示框,按照提示安装即可;在 Windows 下只弹出一个提示框,提示的内容是将 TexturePacker 的安装路径添加到环境变量,所以在 Windows 下是不需要安装的,只需要设置环境变量即可。

2017-07-25 10:09:07 4758

原创 Lua 基础之 Lua 程序

lua 调用 c 函数与 c 调用 lua 函数一样,都是通过 CAPI 和一个栈来实现,lua 调用 c 函数有以下几个步骤 1. 在 c 代码中定义函数 lau.h 中定义了要注册到 lua 中的 c 函数的原型,虽然我测试的时候不使用这个原型也不会出错,但还是要遵循规范比较好

2017-07-25 09:54:39 1404

原创 Lua 基础之扩展应用程序

扩展应用程序 是指以 c 语言为主导,在 c 代码中调用 lua 代码,一种常见的方式是可以把 lua 文件当作配置文件,然后在 c 程序中加载解析

2017-07-25 09:51:20 794

原创 Lua 基础之与 C 交互

lua 是一种嵌入语言,并不能独立运行,而是一个可以链接到其它应用程序的库。lua 是使用 c 语言开发的,因此它与 c 语言的交互非常简单,但 lua 作为一门十分流行的脚本语言,不仅能嵌入到语言中,还能嵌入到 java,c# 等其它语言中。lua 与 c 语言的交互方式有两种,一种是以 c 语言为主,lua 作为 c 语言调用的一个库,这种方式的 c 代码称为 应用程序代码

2017-07-21 10:14:05 506

原创 Lua 基础之协同程序

协同程序协同程序类似于多线程中的线程。lua 提供 非对称的协同程序 ,即 lua 提供两个函数来控制协同程序的执行,一个用于挂起执行,另一个用于恢复执行。协同程序的函数放置在表 coroutine 中,创建时传入一个函数,生成一个 thread 类型的值协同程序的四种状态:挂起(suspended),运行(running)、死亡(dead),正常(normal)

2017-07-21 10:08:34 304

原创 Lua 基础之模块

模块系统的设计目标是可以使用不同的方式来共享代码,一个模块就是一个代码库,其它模块 可以使用 require 函数来加载,加载后得到模块导出的所有东西,如函数、常量、全局变量等。一个比较好的方式是让模块返回一个 table 并保存在一个全局变量中,然后外部模块直接使用这个全局变量来操作 table

2017-07-19 10:01:23 498

原创 Lua 基础之弱引用 table

lua 的垃圾回收器只会回收没有引用的对象,有些时候并不能回收程序员认为的垃圾。比如数组里的元素在其它地方已经没有引用了,但因为还在数组中,因此垃圾回收器并不会去回收它弱引用 table 告诉回收器一个元素在 table 中的引用不应该阻止它的回收。如果一个对象的引用都是弱引用,那回收器就会回收这个对象弱引用 table 有三种:弱引用 key,弱引用 value 和弱引用

2017-07-19 09:58:34 536

原创 Lua 基础之面向对象编程

lua 中的 table 其实就是对象,理由如下 1. table 与对象一样可以拥有状态 2. table 与对象一样拥有一个独立于其值的标识 self,值相同的两个 table 是两个不同的对象 3. table 与对象一样拥有独立于创建者和创建地的生命周期方法table 中字段的值可以是任意类型,如果某个字段的值是一个函数,那这个函数就称为对象的方

2017-07-19 09:48:25 349

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除