【译】NMGen - 高度场简介

原文:http://www.critterai.org/projects/nmgen_study/heightfields.html

为了理解 NMGen 生成导航网格的过程,首先了解如何使用高度场(heightfields)来表示体素(voxel )数据是很重要的。

高度场提供了良好的压缩和数据结构,这对于从几何图形中提取上表面信息特别有用。

基本的高度场结构

考虑欧几里得空间中任意位置的轴对齐的盒子,它的边界由最小和最大顶点定义。

现在将盒子切成宽度和深度相同的垂直列,这些列构成了一个网格。

如何理解Netty中的Inbound和Outbound

错误的理解

ChannelInboundHandlerChannelOutboundHandler,这里的inbound和outbound是什么意思呢?inbound对应IO输入,outbound对应IO输出?这是我看到这两个名字时的第一反应,但当我看到ChannelOutboundHandler接口中有read方法时,就开始疑惑了,应该是理解错了,如果outbound对应IO输出,为什么这个接口里会有明显表示IO输入的read方法呢?

正确的理解

直到看到了Stack Overflow上Netty作者Trustin Lee对inbound和outbound的解释,疑团终于解开:

众所周知,Netty是事件驱动的,而事件分为两大类:inboud和outbound,分别由ChannelInboundHandlerChannelOutboundHandler负责处理。所以,inbound和outbound并非指IO的输入和输出,而是指事件类型。

那么什么样的事件属于inbound,什么样的事件属于outbound呢?也就是说,事件类型的划分依据是什么?

答案是:触发事件的源头

优化IncNet——可变长packet size

最近的工作中用到了WebSocket协议,研究了下它的数据帧格式,发现其payload length的表示方式很适合用来优化以前用到的网络库。

简单来说就是把固定4字节表示包大小的方式,改为用可变字节数表示包大小,大部分包的大小可以用1个字节表示,可表示的大小范围为0 ~ 253字节,稍微大点的包用1+2字节表示,大小范围为0 ~ 64KB,再大的包才用1+3字节表示,大小范围为0 ~ 16MB。对于游戏来说,16MB的包大小足够用了。如果不够,也是有对策的。

先来看下WebSocket的数据帧格式。

WebSocket数据帧格式

RFC 6455 给出了 WebSocket 协议的详细规范,其中第5.1节说到,在WebSocket协议中,数据是使用一系列frame来传输的,随后5.2节详细介绍了frame的格式:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
|N|V|V|V|       |S|             |   (if payload len==126/127)   |
| |1|2|3|       |K|             |                               |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+

战斗制作经验浅谈(一)——关于动作

动作是战斗系统中的重中之重了,不然为啥总说动作打击感呢?

先来看几段视频,本文所讲述的就是下面几款游戏背后的动作机制:

龙姬:

(26秒开始)

几则状态同步的经验

想起来就写一点,不定期更新。

定义术语

先定义几个不算特别专业的术语,方便后面的讨论,平时工作中都是这样叫的:

  • 主角玩家
    • 将游戏客户端中玩家自己的角色称之为主角玩家,简称主角,主角由玩家来控制。
  • 第三方玩家
    • 将游戏客户端中玩家自己的角色以外的其他角色称之为第三方玩家,简称第三方,第三方由服务器发送的同步消息来控制。
  • 服务器玩家
    • 家在服务器中对应的对象,有时根据上下文简称为服务器。

Page 3 of 7

Powered by WordPress & Theme by Anders Norén

粤ICP备2021073162号-1