literwave game.

literwave game.

it's better to burn out than to fade away

vim_op
前言 这是一篇关于vim的使用教程 快捷键 hjkl:上下左右 gg:跳到第一行 G:跳到最后一行 ;/,:快速向后/向前重复ft查找 f{char}/t{char}:跳转到本行下一个char字符出现处/出现前 F{char}/T{char}:往前搜索而非往后 nN:快速重复/查找 进入Insert模式(Normal模式下) i代表insert,当前光标之前开始输入 a代表append,当前光标之后开始输入 o下方插入新的一行,当前光标之后开始输...
skiplist
前言 排行榜是每个游戏常有的功能,大部分情况下分为两种,一种是定时排行,另一种是实时排行。而排行榜的底层是使用redis的zset数据结构,为啥不直接用redis,如果把redis整个都集成过来,会比较臃肿,如果游戏框架里并没有使用到redis,并不需要整个redis都搬过来。如果对跳表的实现感兴趣,就可以通过这篇博客了解一下redis zset的底层实现 源码地址 https://github.com/xjdrew/lua-zset.git 目录结构 正文 创建zset接口 - slCreate 1234567891011121314151617181920212223242526...
lua-mix
前言​ 这是一篇关于lua源码分析的杂谈,里面混入各种知识 正文 static的作用,一个局部变量的创建是在栈区,当出栈的时候,局部变量就销毁了,而使用static 关键字修饰,可以改变变量的生命周期,也就是不会销毁,但是不会改变作用域。使用static修饰全局变量的时候,会使它的作用域变小,也就是外部不可以链接 remalloc函数支持缩容 解析luaL_openlibs 12345678910111213141516171819202122232425262728293031extern void luaL_openlibs (lua_State *L) { cons...
lua-debug-vscode
前言 搜了许多资料,觉得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配置,首先使...
hexo_note
创建一个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源码分析
前言 这是一遍关于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源码分析的博客,每个阶段会有不同的理解,所以这篇博客会更新自己的认知。 正文 首先我们看的是lua.c的入口,也就是我们使用lua.exe执行lua文件的地方,从这里可以知道lua执行lua文本文件的过程。 刚开始使用luaL_newstatenew了一个lua_State结构体 数据类型 lua使用lua_TValue表示lua中所有的类型,具体如下: 123456789101112131415161718// lobject.htypedef struct lua_TValue { TValuefields;} TValue;#def...
avatar
literwave
Time will tell