
游戏开发
文章平均质量分 53
jlaij
这个作者很懒,什么都没留下…
展开
-
游戏服务器开发工具
这里主要总结Memcached网络相关的主要流程Memcached使用的是一个main_base轮训监听客户端,然后分发到其他线程进行处理原创 2022-10-21 12:08:11 · 719 阅读 · 0 评论 -
深入理解Protobuf3协议原理
Protobuf是什么全称为Protocol Buffers,Google推出的序列化框架,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构,该框架不依赖开发语言,也不依赖运行平台,扩展性好,目前支持的语言比较多,包括Java,C++,Python,Ruby等。使用Protobuf在这里使用Windows和Java进行实例演示: 先去github.com/protocolbuf…把protoc-3.11.0-win64.zip下载下来,然后解压,找到bin目录,cmd进去b转载 2021-01-21 15:39:57 · 1391 阅读 · 0 评论 -
lua性能分析工具实现
参考:https://zhuanlan.zhihu.com/p/24873676 --- lua代码性能分析工具-----------------------------------------------------------------------------------------local tinsert = table.insertlocal tsort = table.sortlocal clock = os.clocklocal sformat = string.for原创 2020-12-31 19:17:12 · 889 阅读 · 0 评论 -
c++ 实现函数进入退出记录
#pragma once#include <functional>template<class T>class GuardCls{public: using param_t = typename std::conditional<std::is_reference<T>::value || std::is_pointer<T>::value, T, T&>::type; using func_t = std::functi.原创 2020-12-02 14:55:34 · 544 阅读 · 0 评论 -
windows环境下配置mysql服务记录
1.到官网:D:\mysql-5.7.21-winx64\bin下载2.解压到D盘(个人喜欢):D:\mysql-5.7.21-winx643.配置环境变量,path:D:\mysql-5.7.21-winx64\bin4.检查D:\mysql-5.7.21-winx64\my-default.ini文件的以下两个配置路径是否正确[mysqld]basedir=D:\mysql-5.7.21-winx64datadir=D:\mysql-5.7.21-winx64\data based...原创 2020-08-21 14:30:27 · 322 阅读 · 0 评论 -
服务器端游戏场景优化
对于mmo类游戏,场景往往是游戏的性能瓶颈,优化场景逻辑是游戏开发工作中必不可少的工作。最好是前期开发阶段,就能解决掉场景性能热点,否则后期很难改动。游戏场景主要优化场景内消息的分发处理。尤其是场景内玩家的移动。如果100人在场景内同时移动,就要相互转发100,就要产生100*100个移动包。很多视野外的人其实是不需要知道你的位置,或者你不要看到视野外的人位置,所以首先去掉大量无效的包发送是关键。游戏中对场景移动处理往往分两种,1、按照地图网格移动,一般只需要发送几个拐点就可以(可以利用recast原创 2020-08-14 15:14:08 · 652 阅读 · 0 评论 -
python 实现cmd输入指令
python 利用cmd库实现模拟终端指令输入###########################################################import cmdimport subprocessimport sysfrom robot import *############################################################# def parse(arg):# return tuple(map(int, a原创 2020-08-14 14:11:19 · 2472 阅读 · 0 评论 -
vscode 设置 lua开发环境
1、vscode 安装lua Debug 插件2、安装lua (lua language support visual studio code)插件3、添加lua 调试配置:{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurati原创 2020-08-04 22:44:32 · 7694 阅读 · 1 评论 -
windows 安装使用luarocks
1、下载安装mingw32-gcc下载地址:https://osdn.net/projects/mingw/releases/p15522安装mingw-get-setup.exe选择 勾选 g++ ,然后 点击Installation->Apply Changes安装完成之后,将安装目录添加进环境变量path 里2、下载 lua,官网有编译好的lua下载地址:http://luabinaries.sourceforge.net/download.html解压,将解压目..原创 2020-08-04 17:11:47 · 2829 阅读 · 0 评论 -
c++ 实现对象池
c++ 简单实现一个管理对象池ObjPool.h#pragma once#include <iostream>#include <queue>#include <memory>using namespace std;static constexpr int32_t pool_step = 3;template<typename T>class ObjPool{ using shared_obj_t = shared_ptr<原创 2020-05-26 15:05:39 · 438 阅读 · 0 评论 -
c++完整实现地图寻路A星算法
A星寻路算法的讲解有很多,这里不再论述,只给出实现程序。AStar.h#pragma once#include <vector>#include <map>#include <queue>// 二维地图A*算法实现const int OBLIQUE = 14; // 斜线移动权重为14const int STEP = 10;struct Point{ Point(int id, int reachable); ~Point(); v原创 2020-05-15 22:52:07 · 3041 阅读 · 0 评论 -
c++与游戏开发学习书籍推荐
书籍:《C++ Primer》《数据结构与算法分析:C语言描述》《算法设计与分析基础》《Linux高性能服务器编程》《Linux多线程服务端编程》《PC游戏编程:网络游戏篇》《游戏引擎架构》《2018腾讯移动游戏技术评审标准与实践案例》《虚拟机的设计与实现C/C++》代码:DOOM3 源码chrome 源码redis 源码libevent源码...原创 2020-02-08 01:45:25 · 1848 阅读 · 0 评论 -
日志输出 __FIFL__输出路径太长处理
程序log日志打印时 __FIFL__输出路径太长处理windows项目属性-》c/c++ -》所有选项使用完全路径 否 调试信息格式 程序数据库(Zi)Linux如果是使用CMAKE编译的,在CMakeLists.txt中添加这么一行(C++语言需要将CMAKE_C_FLAGS换成CMAKE_CXX_FLAGS)set(CMAKE_C_FLAGS "${CMAKE_C_...原创 2020-01-21 13:26:53 · 732 阅读 · 0 评论 -
游戏开发之玩家角色属性
本篇的内容源自 PC游戏编程:网络游戏篇玩家角色有基本属性和扩展属性之分基本属性:ATTR_STR 1 //力量ATTR_CON 2 //体质ATTR_DEX 3 //敏捷ATTR_INTE 4 //智力ATTR_KNOW 5 //知识基本扩展属性ATTR_PATP 10 //攻击力ATTR_PDFP 11 //防御...原创 2020-01-19 16:03:03 · 2239 阅读 · 1 评论 -
c++ 实现高效缓存(链式buffer)
如果我们从网络端接收的数据是不定长度的,不能提前分配好网络缓存大小,则可以选择使用链式缓存的实现方式。链式缓存主要是分配固定大小的缓存链保存数据,一个管理器去管理这些缓存链。链式缓存示例://一种链式缓冲//ringbuffer是固定长度,不能够扩展,链式buffer可以任意扩充/** * buffer * *first--chain buffer [1024] * ...原创 2019-12-06 00:23:02 · 3623 阅读 · 1 评论 -
c++ 实现循环缓存buffer
循环buffer是一种高效缓存方式,一般用于接收固定长度协议使用。如果使用不断扩展的缓存操作(见:https://blog.youkuaiyun.com/chinabhlt/article/details/102751880),则我们必须要malloc不断扩张缓存,还会memcpy或memmve操作,效率比较低,而ringbuffer则很好的规避这些低效操作。如果协议长度是固定的,则可以使用ringbuffe...原创 2019-12-05 23:56:24 · 2113 阅读 · 1 评论 -
游戏开发中性能优化
以下优化手段说明来自:2018腾讯移动游戏技术评审标准与实践案例6.1 背景介绍 MMORPG游戏通常玩法和系统的数量都非常多,因此代码量也是非常大的。当 出现性能问题需要优化时,如何从百万行级别代码的工程里,发现那些性能浪费 最严重的代码,进行优化后,如何检验性能优化的效果,需要从工具、原因定位 方法、优化策略几个方面入手来解决问题。6.2 性能优化基础工具要在茫茫码海中发现...原创 2019-10-31 23:58:52 · 1399 阅读 · 0 评论 -
游戏运营活动分类
一、活动目的首先,设计一个活动肯定是有一定目的的。不是某个部门老大拍脑袋要啥就能做啥的。游戏活动设计的好坏和游戏收入的好坏直接挂钩,不要为了出一个活动而出活动,那样没有任何意义,浪费时间也浪费精力。这里要明确几个名词:● AU:周期活跃用户(一般不用)● DNU:每日新登用户数量。● DAU:日活跃用户量。● APA:活跃付费用户量。● ARPU:每用户平均收入,可...转载 2019-10-31 22:44:21 · 7303 阅读 · 0 评论 -
游戏中任务系统设计
1、任务分类 游戏中任务可以分为主线任务、支线任务、日常任务、周任务、节日活动任务,其中周任务和节日任务可以根据设定的日期进行开启关闭,属于重复性任务。2、游戏条件 各类任务开启条件:1、玩家等级 2、玩家攻击力3、前置任务等等 完成条件:玩家进行任务进度是否达成 任务关闭:1、玩家领取奖励后关闭任务。2、时间过期3...原创 2019-10-31 21:43:29 · 9047 阅读 · 0 评论 -
游戏中邮件系统设计
一般游戏中有两种邮件,系统发给某个人的私人邮件、一个是发给全服玩家的公共邮件(比如活动邮件、补偿邮件)。1、系统发给某个人的私人邮件,很简单,玩家在线就推给玩家并加入玩家邮件列表,如果玩家不在线,就发到玩家邮箱中。2、系统是发给全服玩家的邮件,这种邮件需要单独处理,先在内存中保存,同时插入全服邮件箱中。 (1)如果玩家在线,则推给玩家,同时插入玩家邮件列表 (2...原创 2019-10-30 21:15:13 · 13235 阅读 · 0 评论 -
消息处理机制
游戏服务器消息处理机制一般mmo大型游戏都会有多个服务器进程构成,比如 gate、login、scene、world、db、node(进程节点管理也叫服务器管理服)只有gate与玩家进行交互,gate接到玩家消息会转发到不同服,不同服进行对消息处理,并返回给gate,gate在将消息发给玩家。消息通常是使用的都是protobuf。玩家请求消息,以排行为例:message rankA...原创 2019-10-29 19:54:27 · 371 阅读 · 0 评论 -
高效定时器实现方式
一般比较定时器的实现方式有几种1、升序时间链表,然后tick轮询方式2、使用时间轮的方式,主要是解决定时器过多,插入时间链表的时间会增长的情况.设定n个槽位,每个槽是一个时间链表假设有60个槽,每个槽的tick是1s,超时的设定跟槽关系就是 槽位置ts = (cur+(timeout/tick)) % 60, rotation = (timeout/tick )/603、使用最小堆...原创 2019-10-27 20:00:20 · 389 阅读 · 0 评论 -
cpp 可变参数模板传递任意类型参数实现
#include <iostream>#include <variant>#include <vector>#include <string>using namespace std;class Data{public: Data() {} virtual ~Data() {}};template <typ...原创 2019-10-27 16:43:33 · 950 阅读 · 0 评论 -
利用Snowflake 算法生成唯一id
总共64位数字//最高1位不使用,41位毫秒时间,12位中间数(6位机器码,6位进程号),10位毫秒序列SnowFlake.h#pragma once#include <cstdint>#include <chrono>#include <unistd.h>using namespace std;class SnowFlake{...原创 2019-10-27 00:02:58 · 794 阅读 · 0 评论 -
c++ 常用buffer实现
1、一个buffer缓存简单实现#include <cstdio>#include <cstring>#include <stdlib.h>#include <malloc.h>class Buffer{public: Buffer() { m_buf = (char *)malloc(m_incr...原创 2019-10-26 00:09:54 · 4741 阅读 · 0 评论 -
cpp热更
一般c++的热更有两种方式1、c++ 动态加载so的方式,也就是通过dlopen 、dlsym 、dlclose 这三个函数操作实现热更2、c++ 通过执行lua文件的形式,sol2(https://github.com/ThePhD/sol2)这是一个c++ 与 lua交互的开源库,已经支持lua5.3,c++14 c++17都已经支持了。使用lua热更其实跟下面的代码方式差不多,...原创 2019-10-25 16:57:00 · 1798 阅读 · 0 评论 -
cpp 17 封装任意类型数据
利用c++17 variant 可以包装成任意类型数据#include <iostream>#include <variant>#include <vector>#include <string>using namespace std;template<typename T>class AnyData{public...原创 2019-10-23 15:28:05 · 1085 阅读 · 0 评论 -
c++11 生成随机数
利用c++11 提供的随机函数,生成随机数#include <random>#include <limits.h>#include <iostream>using namespace std;template<typename T>class Singleton{public: static T& Instanc...原创 2019-10-23 14:57:32 · 365 阅读 · 0 评论 -
游戏技能系统相关不错的文章收藏
一个MMORPG的常规技能系统https://zhuanlan.zhihu.com/p/26077188技能脚本系统实现分析http://ju.outofmemory.cn/entry/152534一个MOBA游戏的常规技能系统https://zhuanlan.zhihu.com/p/26104183MMORPG游戏服务器技能系统设计:表格字段与技能程序框架https:...原创 2019-10-17 21:19:11 · 298 阅读 · 0 评论 -
c++开发环境常用检查工具罗列
c++ 内存泄漏检查工具valgrind (最常见的,功能很强大,但是对于比较大型的程序,使用会很卡不方便) mtrace dmalloc memwatch glibc 库提供的内存检查函数 tMemMonitor腾讯自主研发内存泄漏分析工具(win平台) c++ 性能分析工具gprof gperftoolsc++ 代码审查工具cppcheck 是一个静态代码检...原创 2019-10-15 21:44:11 · 490 阅读 · 0 评论 -
游戏技术精华分享之腾讯游戏学院-后端篇
游戏技术精华分享之腾讯游戏学院-后端篇腾讯游戏学院2017程序公开课 腾讯游戏学院,直接搜索,如服务器,即出现对应课程项目篇龙之谷服务器设计 《天天酷跑》手游后台属性系统设计教学篇游戏服务器架构概要 游戏开发中的数据表示 游戏服务器存储系统设计 游戏服务器并发设计 核心逻辑设计—登录系统 服务器可用性设计 服务器通信 MMORPG AI系统设计与实现 核心逻辑设...转载 2019-10-15 18:42:33 · 657 阅读 · 0 评论 -
说一说地图AOI 服务器实现(九宫格)
在mmo游戏中,玩家在地图上移动,如果发消息通知地图上其他玩家肯定是不合理的,因为一个地图上有很多人,如果都在移动,那么消息量会很大。为此服务器为了减少发包量,会将地图划分成一个一个的格子,然后通知相邻格子的玩家,而不是全地图的人。通常这种技术叫做AOI。通常的实现方式:1、服务器加载场景地图会将场景按照固定大小格子进行划分,并做好编号,2、通常有三个操作EnterZone、Lea...原创 2019-10-15 14:13:32 · 3494 阅读 · 0 评论 -
游戏开发玩家数据存储处理(个人记录)
结合个人参与的游戏项目开发,谈一下游戏开发玩家数据保存的处理玩家的数据基本上分为两份,一份是玩家下线或者永久保存的数据,通常保存至数据库(mysql或者mongodb)中,一份是保存在内存中。一般玩家数据的处理流程:(玩家不会操作非在线玩家信息)1、玩家上线 (1)新玩家上线,查询玩家是否在数据库中,没有就创建新的角色,写入到数据库中,并将玩家信息保存到内存中 ...原创 2019-10-15 12:49:17 · 8218 阅读 · 4 评论 -
游戏开发项目问题总结(优化和注意点)
优化设计:程序优化涉及到很多方面,一般有开发语言优化(随着开发语言不断升级,会有很多新语法的优化)、程序逻辑的优化(算法优化,使用不同的数据结构等)、设计的优化(比如使用某种设计模式,提高程序的可扩展性)还有一些通用做法(异步并发、并行等),这里只总结常用优化手段:1、异步并发(回调、协程)充分利用cpu时间分片,充分利用cpu的能力2、并行(线程池、多进程)利用cpu多核的性质...原创 2019-10-15 00:43:50 · 1281 阅读 · 0 评论 -
游戏Buff系统
游戏buff系统简单实现Effect.h#pragma onceclass Obj;enum eEffect{ E_EFFECT_ADD_HP = 0, E_EFFECT_DEC_HP = 1, E_EFFECT_ADD_SPEED = 2, E_EFFECT_DEC_SPEED = 3, E_EFFECT_MAX = 4,};/...原创 2019-10-13 18:16:31 · 1785 阅读 · 0 评论 -
游戏AI之初步介绍
目录游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI 《求生之路》系列 角色扮演/沙盒游戏中的NPC 游戏AI 基本设计 智能体(Agent) 感知(Perception) 决策(Decision) 行为(Behavior) 游戏AI 需要学些什么? 有限状态机(FSM) 行...转载 2019-10-12 22:19:29 · 3600 阅读 · 0 评论 -
游戏中状态行为关联实现(AI)
State.h#pragma once#include <iostream>using namespace std;enum eAIState{ E_STATE_INVALID = -1, E_STATE_STAND = 1, E_STATE_WALK = 2, E_STATE_RUN = 3, E_STATE_MAX = 4,...原创 2019-10-12 21:30:17 · 210 阅读 · 0 评论 -
游戏地图同步AOI方法
1:灯塔法。所谓灯塔法,即将大地图划分成有限的小格子,在每个小格子中间放一个灯塔,这个灯塔管理两个队列:一个是本格子内所有的对象集合,另一个是对本灯塔感兴趣的对象集合(简称观察者)。而地图上的每个对象,维护一个视野队列:该队列为其视野范围内的所有对象,即自身感兴趣的所有对象。一个对象在地图上面运动:分为三个操作:enter,move,leave.enter:当对象进入地图的时候,根...转载 2019-10-11 20:09:00 · 1739 阅读 · 0 评论 -
mmo游戏系统设计
思维导图下载地址:https://download.youkuaiyun.com/download/chinabhlt/11851679原创 2019-10-11 14:22:41 · 5176 阅读 · 0 评论