摘要: C函数可以通过堆栈来和Lua交换数据,但有时候C函数需要在函数体的作用域之外保存某些Lua数据,那么我们想到全局变量或static变量,这样做的缺点是: registry全局注册表 解释:一个普通的Lua表,使用假索引(pseudo-index)LUA_REGISTRYINDEX访问。C代码可以访问 阅读全文
posted @ 2016-06-28 11:54 borey 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 之前在《C/C++和Lua是如何进行通信的?》一文中简单的介绍了lua与宿主之间的通信。简单的说两种不同的语言之间数据类型不一样又如何进行数据交换呢?那就是lua_State虚拟栈,通过栈操作和lua库函数,我们很轻松就能完成两者之间的数据交换。 开始之前,明确几个问题,lua中的虚拟栈的索引编号问 阅读全文
posted @ 2016-06-28 11:45 borey 阅读(9051) 评论(0) 推荐(0) 编辑
摘要: 为了实现Lua和其他语言之间的通信,Lua虚拟机为C/C++提供了两个特性: Lua_State状态机 lua_State主要是管理一个lua虚拟机的执行环境, 一个lua虚拟机可以有多个执行环境。Lua虚拟机通过维护这样一个虚拟栈来实现两种之间的通信,lua_State定义如下: 1,虚拟栈的管理 阅读全文
posted @ 2016-06-28 11:40 borey 阅读(1141) 评论(0) 推荐(0) 编辑
摘要: 为什么要在游戏中使用脚本语言? 要解释这个问题首先我们先来了解一下脚本语言的特性: 相对于C/C++这类高复杂性、高风险的编译型语言来说,Lua脚本做为一种轻量级的动态语言,简单的语言特性,精简的核心和基础库,使得语言的学习门槛大大的降低,即使是没有任何游戏经验的人都能快速上手,开发游戏功能。实际上 阅读全文
posted @ 2016-06-28 11:33 borey 阅读(6590) 评论(0) 推荐(0) 编辑
摘要: 先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组、slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据。如果是对其进行整体赋值,则不会修改原数据,相当于拷贝出一个新的临时变量。要想无论什么情况都修改原数据, 阅读全文
posted @ 2016-06-28 11:26 borey 阅读(1574) 评论(0) 推荐(0) 编辑
摘要: 将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用strconv.ParseInt,将16进制数字转换Int64,在使用fmt.Sprintf将数字转换 阅读全文
posted @ 2016-06-28 11:24 borey 阅读(11370) 评论(0) 推荐(2) 编辑
摘要: 1,为什么要控制goroutine的数量? goroutine固然好,但是数量太多了,往往会带来很多麻烦,比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来。比如: 2,用什么方法控制goroutine的数量? 要在每一次执行go之前判断goroutine的数量,如果数量超了,就要阻 阅读全文
posted @ 2016-06-28 11:20 borey 阅读(4753) 评论(0) 推荐(0) 编辑
摘要: 性能测量 在很多情况之下,通过分析代码是很难确定某个模块性能好坏的。请看下面的例子,你觉得哪一个函数性能最优? 执行 #go test -bench=. -v 很明显第二种方式比第三种方式要快100多倍。性能测量为我们编写高性能的go程序提供了可靠的依据。 性能分析 性能分析 1,使用标准库runt 阅读全文
posted @ 2016-06-28 11:11 borey 阅读(403) 评论(0) 推荐(0) 编辑