- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 Cocos Creator 2D摄像机 [Lv.2] 截图
本文在 Cocos Creator 2D摄像机 [Lv.1] 小视图 所完成的工程的基础上进行修改,并增加截图功能。
2021-06-28 19:01:27 905 8
原创 Cocos Creator 2D摄像机 [Lv.1] 小视图
本系列文章主要实操2D摄像机,在官方Demo的基础上,做了适当的修改,并增加了新的内容。文中对相关知识点进行适当展开,不做深入研究。以实际操作做为出发点,帮助读者快速实现并且掌握2D摄像机。
2021-06-28 16:27:08 1489 2
原创 Cocos Creator JSB [Lv.3]
本文内容大部分源于官方文档,对其中一些比较重要的内容,以及有自己想法的内容做了适度的展开,意在帮助读者更加全面的了解 JSB。
2021-06-25 11:10:53 757
原创 Cocos Creator JSB [Lv.2] TODO
本文本来是想介绍 JSB自动绑定,但在为 tojs 工具搭建运行环境时,发现对运行环境的要求有些苛刻。python,yaml,cheetah都需要32位的版本,可我机器上装的都是64位的版本。如果重新安装,不确定会对现有的工具有什么影响。故在此只对一些资源、工具以及思路做一些记录,之后如果有心思折腾,再重新整理。
2021-06-24 17:24:19 222 6
原创 Cocos Creator JSB [Lv.1] (3)
承接上文 Cocos Creator JSB [Lv.1] (2) 在上文中,我们已经跟小姐姐进行了基本的互动。可是光说不练怎么行,本文中我们将要给小姐姐送礼物~
2021-06-23 19:36:58 333 2
原创 Cocos Creator JSB [Lv.1] (2)
承接上文 Cocos Creator JSB [Lv.1] (1) 在上文中我们已经找到了小姐姐,本文在此基础上终于可以跟小姐姐进行互动啦~
2021-06-23 19:36:19 371 2
原创 Cocos Creator JSB [Lv.1] (1)
本文主要实操 JSB 的手动绑定,在官方教程的基础上,做了适当的修改,并增加了新的内容。文中对相关知识点进行适当展开,不做深入研究。以实际操作做为出发点,帮助读者快速实现并且掌握 JSB 手动绑定。
2021-06-23 19:35:22 564 2
原创 Cocos Creator 热更新 [Lv.2]
本文内容大部分源于官方文档,对其中一些比较重要的内容,以及有自己想法的内容做了适度的展开,意在帮助读者更加全面的了解热更新。
2021-06-18 15:13:51 785 4
原创 Cocos Creator 热更新 [Lv.1] (3)
承接上文 Cocos Creator 热更新 \[Lv.1\] (2)在上文中已经基本实现了热更新的功能,接下来就是让它生效了。
2021-06-17 13:15:46 586 2
原创 Cocos Creator 热更新 [Lv.1] (2)
承接上文 Cocos Creator 热更新 [Lv.1] (1)在上文中对热更新进行了相关的初始化工作,本文在此基础上实现热更新的检测以及更新。
2021-06-17 12:00:55 597 2
原创 Cocos Creator 热更新 [Lv.1] (1)
本文在官方热更新教程的基础上,做了适当的修改,使得整体的逻辑结构更加清晰。文中对热更新相关的知识点进行适当展开,不做深入研究。以实际操作做为出发点,帮助读者快速实现并且掌握热更新。
2021-06-17 11:38:58 727
原创 快速掌握Lua 5.3 —— 资源管理
Q:Lua的”finalizer”? A:在我们之前看到的使用”userdata”的例子中,我们只关心如何创建并使用”userdata”,从未关心何时以及如何释放我们创建的”userdata”,因为这些事都由Lua的垃圾回收器帮我们处理。然而很多时候,程序并不会这么简单,有可能在其中还会涉及到文件句柄,窗口句柄等,此时这些资源就需要创建者进行管理。 一些面向对象语言提供了析够器用来帮助用户管理
2016-05-22 21:21:57 5359
原创 快速掌握Lua 5.3 —— 调试库 (2)
Q:如何调试”Closure”的”upvalue”信息? A:--[[ debug.getupvalue(f, up) 返回函数("Closure")"f"的第"up"个"upvalue"的名字和值。 Lua按照"upvalues"在匿名函数中出现的顺序对其编号。如果指定的"up"索引越界,则返回"nil"。 以'('开头的变量名表示没有名字的变量(比如是循
2016-05-08 16:40:50 4210 1
原创 快速掌握Lua 5.3 —— 调试库 (1)
Q:什么是活动函数?----------A:程序中被调用但还未执行完成的函数。```function g() --[[ 此时函数"g"被调用但还未执行完成,是活动函数。所以这里获取的是函数"g"的信息。 "debug.getinfo(2)"获取的才是函数"f"的信息。]] local x = debug.getinfo(1, "n") for k, v in pairs(x) d
2016-05-08 16:39:40 2514
原创 快速掌握Lua 5.3 —— userdata (2)
Q:如何使用"userdata"的"metamethods"?A:我们继续来修改上一节中的例子,这次我们的目标是使用面向对象的方式调用"userdata"的方法。这个目标既可以在Lua中实现,也可以在C库中实现,我们先来看一个比较简单的方式,在Lua中实现。"mylib.c"中代码无需更改,只需要修改"a.lua"中的代码,
2016-05-08 10:51:45 2091
原创 快速掌握Lua 5.3 —— userdata (1)
Q:什么是"userdata"?A:"userdata"分为两类,"full userdata"和"light userdata"。Lua使用他们来表示C中一些特殊的类型。前面的章节中,我们看到了如何通过C编写新的函数来扩展Lua;使用"userdata",我们将可以通过C编写新的类新来扩展Lua。
2016-05-08 10:45:52 6170
原创 快速掌握Lua 5.3 —— 编写提供给Lua使用的C库函数的技巧 (2)
Q:什么是”registry”?A:有时候,我们需要在程序中使用一些非局部的变量。在C中我们可以使用全局变量或是静态变量来实现,而在为Lua编写C库的过程中,使用以上类型的变量并不是一个好的方式。首先,这些变量中无法存储Lua的值。其次,这些变量如果在多个Lua状态机中被使用,则很可能造成非预期的结果。 一个替代方案是,将这些值存储在Lua的全局变量中。这种方式解决了上面提到的两个问题,Lua全局
2016-04-24 17:23:50 4878
原创 快速掌握Lua 5.3 —— 编写提供给Lua使用的C库函数的技巧 (1)
Q:如何在C库函数中灵活的操作Lua的”table”?A:--[[ void lua_settable(lua_State *L, int index); 从虚拟栈中"index"处获得"table",栈顶获得"value", 栈顶下面一个元素获得"key"。相当于在Lua环境中执行"table[key] = value"命令, 设置"table[key]"的过程有可能
2016-04-11 15:39:52 4976
原创 快速掌握Lua 5.3 —— 从Lua中调用C函数
Q:Lua调用C函数的两种方式?A:1、程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C得到函数的执行结果。2、程序主体在Lua中运行,C函数作为库函数供Lua使用。第一种方式看起来很罗嗦,也很奇怪。既然程序主体运行在C中,而且最终使用的也是C中定义的函数,那么为何要将函数注册给Lua,然后再通过Lua调用函数呢?
2016-04-03 23:09:32 22384 4
原创 快速掌握Lua 5.3 —— 扩展你的程序 (2)
Q:如何在C中调用Lua的函数? A: 1、将函数名入栈。 2、将参数按照形参的顺序依次入栈。 3、调用函数。此过程会将函数的参数出栈,调用完成后将函数的返回值入栈。 4、获取函数的返回值。 “config.lua”文件中:function f(x, y) return (x ^ 2 * math.sin(y)) / (1 - x)end“main.c”文件中:
2016-03-21 13:58:20 2268 1
原创 快速掌握Lua 5.3 —— 扩展你的程序 (1)
Q:如何在C中将Lua作为配置文件语言使用?A:"config.lua"文件中:```-- window sizewidth = 200height = 300```"main.c"文件中:```#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <lua.h>
2016-03-21 10:26:33 1850
原创 快速掌握Lua 5.3 —— Lua与C之间的交互概览
Q:什么是Lua的虚拟栈? A:C与Lua之间通信关键内容在于一个虚拟的栈。几乎所有的调用都是对栈上的值进行操作,所有C与Lua之间的数据交换也都通过这个栈来完成。另外,你也可以使用栈来保存临时变量。虚拟栈由Lua管理。 栈的使用解决了C和Lua之间两个不协调的问题:第一,Lua会自动进行垃圾收集,而C要求显示的分配存储单元,两者引起的矛盾。第二,Lua中的动态类型和C中的静态类型不一致引起的
2016-03-17 16:55:56 8895
原创 快速掌握Lua 5.3 —— 操作系统库
Q:与文件操作相关的库方法? A:--[[ os.remove(filename) 删除文件名为"filename"的文件,"filename"可以是一个普通文件或是一个空的目录。 如果删除失败,则返回"nil"加上错误描述以及错误码。]]print(os.remove("existent-file")) --> trueprint(os.remove("n
2016-03-09 23:55:08 2269
原创 快速掌握Lua 5.3 —— I/O库 (2)
Q:什么是”Complete Model”? A:所有的文件操作都基于明确指定的文件句柄,可以同时打开多个文件句柄。这就意味着同一时间可以操作多个文件,对于每一个文件读或写均可。文件句柄等同于C语言中的”FILE*”,它代表一个被打开文件的当前读取位置。io.open()可以指定打开的文件,并返回其文件句柄,--[[ io.open(filename [, mode]) 以"m
2016-03-04 00:04:16 2016
原创 快速掌握Lua 5.3 —— I/O库 (1)
Q:什么是”Simple Model”? A:所有的文件操作都基于一个默认的输入文件和一个默认的输出文件,这就意味着同一时间对于输入和输出来说,只可操作一个文件(默认的文件)。默认的输入文件初始化是stdin,默认的输出文件初始化是stdout,io.input()和io.output()可以更改对应的默认文件,-- "a.lua"文件中:--[[ "io.read()"从"io.in
2016-03-01 22:27:30 1766
原创 快速掌握Lua 5.3 —— 字符串库 (3)
Q:什么情况下"pattern"会匹配空串?----------------------A:要小心的使用`*`和`-`,因为它们可以匹配零次。```-- 如果你打算用"%a*"匹配单词,你会发现到处都是单词。print(string.find(";$% **#$hello13", "%a*")) --> 1 0print(string.find(";$% **#$hello13", "%a
2016-02-21 22:47:31 2699 3
原创 快速掌握Lua 5.3 —— 字符串库 (1)
Q:对字符串操作的基本函数? A:--[[ string.byte(s [, i [, j]]) 依次返回字符串"s"中从"i"到"j"的字符的ASCII码。 "i"默认为1,"j"默认为"i"。"i"或"j"如果为负数,则在字符串"s"中从后往前数。]]print(string.byte("abc")) --> 97print(st
2016-02-21 15:35:01 4058
原创 快速掌握Lua 5.3 —— 字符串库 (2)
Q:模式匹配字符串的相关函数? A:--[[ string.find(s, pattern [, init [, plain]]) 在字符串"s"中查找第一个与匹配模式"pattern"相匹配的子串, 函数返回子串的开始位置和终止位置。如果未找到返回"nil"。 如果在"pattern"中定义了捕获,捕获到的若干值也会在之后依次返回。 "init"
2016-02-21 13:53:21 2576
原创 快速掌握Lua 5.3 —— "table"库
Q:如何向”table”中插入和删除元素?A:之前提到的,向”table”中插入元素使用索引的方式,而删除’table”中的元素则是将其赋为nil。这里介绍的是”table”库中提供的插入与删除函数,--[[ table.insert(list, [pos,] value) 向表"list"的"pos"位置插入值"value"。 list[pos], list[pos+1], ·
2016-02-17 15:25:55 2503
原创 快速掌握Lua 5.3 —— "Weak Tables"以及数学库
Q:“引用”和“引用计数”?--------------A:“引用”既为对象的名字。比如`a = {}`,名叫`a`的变量存储的值是一个"table","table"的名字是`a`;同时还可以说变量`a`存储着"table"的“引用”。当“(强)引用”被创建时,对象的“引用计数”加1,只要对象的“引用计数”不为0,对象就不会被销毁,Lua的“垃圾回收系统”只回收那些“引用计数”为0的对象。
2016-02-15 11:26:56 2028
原创 快速掌握Lua 5.3 —— 面向对象编程
Q:如何在Lua中定义对象的方法以及调用对象的方法? A:面向对象的特殊性在于它以this指针的方式传递了对象本身,并且这种操作是隐藏起来的。 在Lua中使用:实现面向对象方式的调用。:只是一个语法糖,它同时在方法的声明与实现中增加一个名为self的隐藏参数(对象本身)。Account = {balance = 1000} -- 账户余额初始为1000。--[[ 取钱。
2016-02-13 22:03:50 5220
原创 快速掌握Lua 5.3 —— packages
Q:Lua如何管理”package”? A:Lua使用”table”来表示”package”,就像Lua标准库的做法一样。我们也可以使用”table”来创建自己的”package”。-- "complex.lua"文件中,一个实现对复数运算的"package"。complex = {}-- 用一个"table"表示一个复数,"r"是实部,"i"是虚部。function compl
2016-02-09 00:14:53 1119
原创 快速掌握Lua 5.3 —— 环境
Q:_G? A:_G是一个普通的”table”,它其中存储了当前运行环境中所有的全局变量。type(_G) --> tablefor n in pairs(_G) do print(n) end -- 打印当前运行环境中所有全局变量。我们平常在程序中所写的全局变量就存储在其中,全局变量名是”key”,全局变量值是”value”,a = 10print(_G["a"])
2016-02-05 17:12:23 3374
原创 快速掌握Lua 5.3 —— "metatables" and "metamethods" (2)
Q:如何定义访问"table"相关的"metamethods"?A:访问"table"相关的"metamethods"有两个,`__index`和`__newindex`。1、之前说过,当访问一个"table"中不存在的域时,返回结果是`nil`。这是正确的,但并不是完全正确。实际上当这种情况发生时,Lua会试图寻找对象的"metatable"中名
2016-01-29 13:28:58 1282 1
原创 快速掌握Lua 5.3 —— "metatables" and "metamethods" (1)
Q:什么是”metatable”? A:”metatable”是一张定义了一些特殊功能的”table”,当他被分配给某个”table”(另一个”table”,与”metatable”不是同一个”table”)时,这个”table”就具有了这些特殊功能。 通常在Lua中对”table”的操作是:插入一个”key-value”对,通过”key”查找”value”,遍历所有的”key-value”对
2016-01-28 19:55:07 1888
原创 快速掌握Lua 5.3 —— 数据操作
Q:如何利用Lua构造器操作数据?A:将每条数据作为Lua中的一个”table”构造,将数据中的每一个域作为”table”中的每一个”value”。比如下面这些数据, Donald E. Knuth,Literate Programming,CSLI,1992 Jon Bentley,More Programming Pearls,Addison-Wesley,1990在Lua中
2016-01-27 12:16:13 1447
原创 快速掌握Lua 5.3 —— 数据结构
Q:如何使用”table”创建一维数组? A:-- 使用构造的方式。squares = {1, 4, 9, 16, 25, 36, 49, 64, 81}-- 使用"for"循环 + 连续的索引。a = {} -- new arrayfor i=1, 1000 do a[i] = 0end-- 当然,连续的索引非必须都是正数。a = {}for i=-5, 5
2016-01-23 23:45:31 1506
原创 快速掌握粒子编辑器 —— onebyonedesign网页版
粒子编辑器名声最响的是”mac”平台下的”ParticleDesigner”,可是其他平台上的粒子编辑器却非常少。 今天介绍一款网页版的粒子编辑器, onebyonedesign网页版粒子编辑器打开页面,默认是一个火焰的效果。你可以在黑色屏幕上拖动或者点击,以改变火焰的位置(实际上是改变粒子发射器的位置)。 右侧是操作界面,可以导入导出粒子效果,更改粒子的纹理等等,而主要的操作还是通过拖动滑块
2016-01-23 11:55:12 2298
原创 快速掌握Lua 5.3 —— 两个完整的例子
第一个例子将Lua脚本作为一个小型的简化版的“数据库”,展现了如何简单高效的将这个“数据库”中的数据转化为网页显示。-- "db.lua"文件中内容。--[[ 这里看似是一张名为"entry"的表中存储了许多数据, 实际上在转化程序中这时一个名为"entry"的函数, 参数是下面这个存储了许多数据的"table"。 还记得"foo({})"与"foo{}"等同吗?]]
2016-01-21 16:51:32 4922
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人