Tars框架Future/Promise使用

在采用tars2cpp工具自动生成c++文件时,相应的file.tars会自动生成file.h文件。在.h文件里会生成你自定义接口的RPC方法,一共有四种:

  • 同步(sync)方法;
  • 异步(async)方法;
  • Future/Promise方法;
  • 协程(coco)方法;

sync/async方法在官方文档里都有使用的样例,对于不满足sync/async,然后想在Tars下使用Future/Promise的同学看看此文或许会有帮助。

文章内容、样例都是基于Tars框架下提供的Future/Promise进行分析,与boostC++11、以及其他语言提供的Future/Promise不完全相同。

Read More →

UE4 ShooterGame Server研究

以下内容都是基于Unreal Engine版本:4.18.2-0+++UE4+Release-4.18。

操作系统是:Window10 x64专业版。

编译工具:VS2017 企业版。

在上一篇文章UE4 ShooterGame Standalone Dedicated Server(Windows & Linux),主要讲述如何编译、部署一台ShooterGame服务器。这篇文章里会讲述一些UE4 Server相关的基础知识,以及如何修改ShooterGame Dedicated Server的内容为我们所用。

阅读过一点ShooterGame代码再读此文效果更加,后面Server若无特指,均表示Dedicated Server。

参考文献:https://docs.unrealengine.com/latest/CHN/Gameplay/Networking/Server/index.html

Read More →

UE4 ShooterGame Standalone Dedicated Server(Windows & Linux)

以下内容都是基于Unreal Engine版本:4.18.2-0+++UE4+Release-4.18。

操作系统是:Window10 x64专业版。

编译工具:VS2017 企业版。

文中提及目录路径都是相对路径,例如UnrealEngine-release\Engine\Binaries\Win64,全路径为D:\ue4\UnrealEngine-release\Engine\Binaries\Win64,其中D:\ue4为每个用户自行选择的UE4安装目录。

ShooterGame的全路径D:\ue4\ShooterGame

Read More →

Tars框架进阶

总结Tars中一些重要的原理与使用方式,内容可能会有部分内容与官方docs重合,但绝对不会是官方docs的搬运。

本文适合已经可以自行安装好Tars,并且使用过一段时间Tars,对其有一些基本感知的人阅读。当然,同时也欢迎Tars新鸟、老鸟来交流。

Tars中一些重要的概念

Tars核心点有四个:

  • 一套服务器框架(特点:高稳定性、高可用性、高性能);
  • 十分方便的内建RPC机制(特点:开发使用简单方便);
  • 丰富的公用库(特点:封装了大部分常用方法,易于使用);
  • 服务治理平台(功能:服务部署、发布、配置、监控、调度管理、容灾);

Read More →

std::move()实际应用分析

最近因为项目原因接触到了C++11的移动语义(move-semantics),参考了大量资料。不少资料都是从C++左右值的概念到C++11的右值引用,再牵扯出构造函数的实现方式,最后给出一个“实际”意义不高的一串代码,到最后也看不出这个新加入的语义是为了解决什么问题。

于是想自己记录一篇文章,用几句话来解释一些基本概念,几段代码来展示它我个人认为最直观的用途。

Read More →

服务端游戏编程之设计模式(上)

最近利用碎片的时间读到了《游戏编程模式》(作者:Robert Nystrom)一书,感叹于作者对游戏编程模式这块的理解之深,总结出来的内容深入浅出,样例也是从经典的场景中抽象出来,恰到好处。

虽然整本书的内容都是从游戏客户端的角度出发,同时并不影响其他端人员的阅读,所以说我写这篇文章的目的也十分简单:想从游戏服务端的角度出发,参照原书的章节,总结一下我对于游戏编程设计模式理解。

文章未对各种设计模式的经典实现进行讲解,因为这类资料太多,还望见谅。

关于游戏服务端设计模式的个人理解概述:

  • 相比较GOF书里提到的,能完全契合使用的设计模式比较少,一些需要变化后使用;
  • 在满足需求的前提下,使用设计模式的目的是为了实现高内聚、低耦合,增加可维护性;
  • 合适、合理、优雅的使用;切勿强行滥用、炫技(为了解耦而解,导致代码已经支离破碎,不利于阅读维护)!

Read More →

腾讯开源服务器框架Tars安装使用

2017年4月10日,腾讯后台逻辑层的统一应用框架TAF(Total Application Framework)开源了,取名为tars。

GitHub:https://github.com/Tencent/Tars

作为一个使用过2年TAF(后文都称tars)平台的用户,对其还是有不少感情的。所以在Debian系统上,迫不及待的自己搭建了一套tars,期间踩了不少坑故在此记录一下。

(这不是一篇教程,建议是官方教程与这篇文章里的东西结合起来看,您有疑问或者建议也可以留言与我直接交流讨论。)

tars_man

Read More →

Unity2D游戏项目导出地图数据

需求背景

最近着手了一个使用Unity构建的2D手机游戏项目,项目服务端需要设计简单的AI,AI的基础是寻路,寻路依赖地图数据。

问题分析

Unity的3d开发环境中,原生自带了Navigation的组件,该组件可以快速的在Unity3D项目中生成NavMesh数据,并且同时支持Unity内置的寻路功能。但是对于Unity2D项目并没有类似的功能,所以得要自己想办法、造轮子。

需求也很明确:

1、能导出0/1方格地图数据提供给A*寻路,0表示区域可行走,1表示区域有障碍;(文末会提到为何不沿用NavMesh数据格式)

2、对于地图的变更,仅修改参数,不用修改代码,一键操作生成需要的地图数据文件;

3、能够兼容一些需求变更,比如击碎物,机关门之类;

Read More →

服务端Box2D进阶

此文紧接我的上一篇博文 – 服务端Box2D入门,进阶篇会以更加贴近实际工程的角度来对入门篇的内容进行优化。box2d

首先我们看看入门篇遗留的一些问题:

密度

在Box2D中,刚体的密度(density),但是千克/平方米(因为是2D,所以不是立方米),默认值是0千克/平方米。

所以我们若把密度设置为1,形状设置成SetAsBox(1.0f, 1.0f),那么这个刚体的重量是4千克。

冲量、力、速度的关系

首先我们看看力、速度、时间、刚体质量之间的关系:

力 = 质量 * 速度 / 时间

那么冲量是什么呢?它就是力在一定时间的内的积累:

冲量 = 力 * 时间

所以我们可以得到:

冲量 = 质量 * 速度

那么对于入门篇中,帧时间为1/60秒刚体质量为4千克

Read More →

服务器端Box2D入门

Box2D是一个用于游戏的2D刚体仿真库。它的核心目的是为了模拟真实的2D环境,让物体运动更加真实,交互性更好。本文主要介绍一些使用Box2D的基础知识,并且记录如何在没有图形化界面的Linux服务器上使用它。(例子就是我使用的这台:D)。box2d

Read More →