AST(Abstract syntax tree)抽象语法树,用于表示编程语言源代码的一种抽象语法的结构,树的每个节点都对应源代码中的一个结构。
前言
计算机如何生成 AST 结构?一般来说顺序如下:
- 词法分析
扫描源代码,生成标记(token)
- 语法分析
解析 tokens,构造 AST 结构
AOI(Area Of Interest)翻译过来称为“感兴趣的区域”,用于计算玩家与玩家(或其他 Entity)之间彼此进入、离开、移动视野的算法。通俗的解释比如,玩家离开某个地图时,计算出需要通知的其他玩家。
AOI 模块是多人联机游戏服务器中很重要的功能模块之一,AOI 模块的“好”与“坏”会很大程度上影响服务器的性能。
当一个玩家进入场景后,首先要计算出场景中的其他所有玩家并放进对象集合(又称观察者集合),之后该玩家的进入、移动、离开或其他行为都将会一一通知该集合内的玩家,并且每个玩家都需要维护这样一个对象集合。
Watchers 观察者集合,即能够看到我的其他玩家或实体。
需要注意的是,该对象集合内的玩家列表会随着玩家的行为发生变化,在玩家离开场景后清空对象集合。
寻路算法是游戏比较重要的组成部分之一,尤其在国内游戏很常见的自动寻路系统,比如操纵角色从 A 点到 B 点的移动。计算最短路径有很多不同的算法,比如:Dijkstra、AStar(A*)、NavMesh(多边形算法)、RVO 动态避障等等
寻路算法的移动路径核心有 2 点:最短、可移动。
所以首先需要确定起点坐标的相邻节点(4 方向、8 方向),然后通过计算最靠近终点坐标的相邻坐标(不考虑障碍物)确认检索方向,再去计算“相邻坐标”移动的下一个坐标(距离终点坐标最近 & 可移动),重复计算这个过程直至找到终点坐标,这就是 A*算法
A*算法是一类基于网格的寻路算法,也就是把地图看作一个由网格组成的矩阵,每个坐标就是一个网格。
一张 3x3 地图
链表是一种不需要连续空间存储的线性数据结构,通过指针把数据节点链接起来。数据节点的逻辑顺序取决于链表指针链接的先后顺序,同时,链表也有:单链表、双链表、循环链表等多类。
链表是由一系列节点组成,除此之外链表还有几个基本概念:
一般由两块组成:数据域、指针域。
链表的第一个数据节点。
非必要节点,放在第一个数据节点前。一般用于存储链表的信息(比如说链表长度等)和保证数据节点操作的统一性。
指向第一个节点的指针,如果有头节点则指向头节点,否则指向首元节点。
最简单的一种链表,只支持一个遍历方向:链头 -> 链尾。两部分组成:当前节点的数据、指向后置节点的指针(尾节点指针指向nil)。
2009 年 Go 语言首次发布后,支持泛型一直以来呼声最高的功能之一。十年磨一剑!Go 官方终于在 2022 年 03 月 15 日发布 go1.18 stable 正式支持泛型
泛型的核心是把类型参数化,通俗的来说就是允许使用时才指定类型的一种设计。
假设有个两变量相加的需求,且这俩变量可能是 int 或者 string,简单粗暴就直接定义两个函数分别支持 int、string
1 | // 传统写法 |
那如果使用泛型来定义呢,它的写法大概是这样的
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