在网络游戏中,通信协议是其中必不可少的组成部分。一个通信协议的大小、结构将与服务器负载及客户端延迟息息相关。
前言
游戏的通信协议,一般需要考虑 2 个部分:
网络传输协议
数据交换格式
之前在学习数据结构与算法 - AStar(A*)等寻路算法的过程中提到过网格地图时由类似0是可移动节点、1是障碍节点的网格组成的一张地图,这些地图信息是怎样生成出来的呢?
地图编辑器是一种所见即所得的游戏地图制作工具,它辅助设计和输出地图数据,包括创建、编辑、存储和管理游戏地图数据。
只考虑 2D 地图,一般来说有两种方式:
AOI(Area Of Interest)翻译过来称为“感兴趣的区域”,用于计算玩家与玩家(或其他 Entity)之间彼此进入、离开、移动视野的算法。通俗的解释比如,玩家离开某个地图时,计算出需要通知的其他玩家。
AOI 模块是多人联机游戏服务器中很重要的功能模块之一,AOI 模块的“好”与“坏”会很大程度上影响服务器的性能。
当一个玩家进入场景后,首先要计算出场景中的其他所有玩家并放进对象集合(又称观察者集合),之后该玩家的进入、移动、离开或其他行为都将会一一通知该集合内的玩家,并且每个玩家都需要维护这样一个对象集合。
Watchers 观察者集合,即能够看到我的其他玩家或实体。
需要注意的是,该对象集合内的玩家列表会随着玩家的行为发生变化,在玩家离开场景后清空对象集合。
寻路算法是游戏比较重要的组成部分之一,尤其在国内游戏很常见的自动寻路系统,比如操纵角色从 A 点到 B 点的移动。计算最短路径有很多不同的算法,比如:Dijkstra、AStar(A*)、NavMesh(多边形算法)、RVO 动态避障等等
寻路算法的移动路径核心有 2 点:最短、可移动。
所以首先需要确定起点坐标的相邻节点(4 方向、8 方向),然后通过计算最靠近终点坐标的相邻坐标(不考虑障碍物)确认检索方向,再去计算“相邻坐标”移动的下一个坐标(距离终点坐标最近 & 可移动),重复计算这个过程直至找到终点坐标,这就是 A*算法
A*算法是一类基于网格的寻路算法,也就是把地图看作一个由网格组成的矩阵,每个坐标就是一个网格。
一张 3x3 地图
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true