前言
这是一篇关于vim的使用教程
快捷键
hjkl:上下左右
gg:跳到第一行
G:跳到最后一行
;/,:快速向后/向前重复ft查找
f{char}/t{char}:跳转到本行下一个char字符出现处/出现前
F{char}/T{char}:往前搜索而非往后
nN:快速重复/查找
进入Insert模式(Normal模式下)
i代表insert,当前光标之前开始输入
a代表append,当前光标之后开始输入
o下方插入新的一行,当前光标之后开始输...
前言
排行榜是每个游戏常有的功能,大部分情况下分为两种,一种是定时排行,另一种是实时排行。而排行榜的底层是使用redis的zset数据结构,为啥不直接用redis,如果把redis整个都集成过来,会比较臃肿,如果游戏框架里并没有使用到redis,并不需要整个redis都搬过来。如果对跳表的实现感兴趣,就可以通过这篇博客了解一下redis zset的底层实现
源码地址
https://github.com/xjdrew/lua-zset.git
目录结构
正文
创建zset接口 - slCreate
1234567891011121314151617181920212223242526...
前言 这是一篇关于lua源码分析的杂谈,里面混入各种知识
正文
static的作用,一个局部变量的创建是在栈区,当出栈的时候,局部变量就销毁了,而使用static 关键字修饰,可以改变变量的生命周期,也就是不会销毁,但是不会改变作用域。使用static修饰全局变量的时候,会使它的作用域变小,也就是外部不可以链接
remalloc函数支持缩容
解析luaL_openlibs
12345678910111213141516171819202122232425262728293031extern void luaL_openlibs (lua_State *L) { cons...
前言
搜了许多资料,觉得vscode调式c程序的教程有点杂,所以写下这篇博客,使用vscode调用lua源码,版本是lua5.3.6,下载地址为http://www.lua.org/versions.html
正文
vscode的插件准备(有安装code runner的需要禁止用)
准备一个vscode工程目录如下:
把lua-5.3.6的源文件复制一份到include文件夹和src,然后使用del *h或del *c删除对应不需要的文件夹。如图:
然后需要注释掉lua.c源码的int main和luac.c源码的int main的入口
vscode调式c配置,首先使...
创建一个md文件命令hexo new xxx
123需要hexo cleanhexo d -g
https://blog.csdn.net/Xupixel/article/details/120405501
内存对齐 内存对齐是为了使用空间换时间的一种策略
为什么需要内存对齐 cpu访问内存时,并不是逐个字节访问,而是以字长为单位访问,比如64位的cpu,字长为8个字节,那么cpu访问内存的单位也是4字节。(忽略cpu访问缓存而不是内存)
比如16个字节,一次读取8个字节那么只需要读取2次。
举例 假如有以下结构体
1234struct Test{ uint8_t a; uint64_t b;}
a占一个字节,b占8个字节,如果按照内存对齐的方式,cpu只需要读取两次,第一次读取a,第二次读取b。如果不是按照内存对齐方式,第一次读取a变量,第二次读取b变量...
战斗分析
战斗需要的数据(怪物)
首先需要怪物组id列表,决定玩家打几组怪物
打的回合数
攻击者的战斗列表
怪物的等级列表
客户端的其他数据(地图,是否负伤, 阵法id)
法则数据列表
初始血量列表
需知前提
怪物同样需要构造战斗列表,战力一般都是通过属性计算的
注意站位信息,3人的队伍,可能前排一个,也有可能前排两个,有啥不同呢,因为打前排和打后排伤害是不同的。
战斗最好在里面有动态测试标志。
得到攻击者和防御者的列表
数据结构为
12345678910111213141516figh_list = {baseList = {}, }b...
宗门大比宗门大比是策划想出来的运营活动,本质就是跨服活动战斗,和本服活动战斗,难点就是如何共享玩家的个人数据,不讨论玩家个人数据更新问题。
设计
首先呢,活动和运营活动都在activity_base里面,如果是跨服,会判断是否是跨服group_idx也就是跨服分组,也就是多少个服跨在一起,跨服也有服务器id,这设计到跨服和游戏服务器之间的rpc通信,
首先是战斗,跨服那边使用id大于30000的,作为跨服活动id,这样的好处是不管在哪都可以判断这个活动是否是跨服,当开始战斗的时候,就直接判断是运营活动,还是跨服运营活动,如果是跨服运营活动,就把战斗信息发到跨服服务器上的gameserve...
前言
这是一遍关于skynet源码分析的blog,中间会对lua源码做对比
正文
skynet执行的入口文件是skynet_main.c,先来看看int main执行了些什么。
config_file是启动skynet执行的配置文件,首先会new一个lua vm,加载一下标准库,luaL_loadbufferx(L, load_config, strlen(load_config), "=[skynet config]", "t")是编译了load_config(lua会把代码文件看作成一个chunk,并push进栈里,也就是Lclouse,l...
前言
这是一篇关于lua源码分析的博客,每个阶段会有不同的理解,所以这篇博客会更新自己的认知。
正文
首先我们看的是lua.c的入口,也就是我们使用lua.exe执行lua文件的地方,从这里可以知道lua执行lua文本文件的过程。
刚开始使用luaL_newstatenew了一个lua_State结构体
数据类型
lua使用lua_TValue表示lua中所有的类型,具体如下:
123456789101112131415161718// lobject.htypedef struct lua_TValue { TValuefields;} TValue;#def...