游戏服务端之AOI概述

2024-01-14 16:08
文章标签 概述 服务端 游戏 aoi

本文主要是介绍游戏服务端之AOI概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文来自:http://blog.csdn.net/yitouhan/article/details/17642587

AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。

一般在游戏的中,游戏的世界都是由各种场景组成,场景中有着各种各样的Obj(英雄、怪物、NPC和掉落物品等等)。当英雄在移动的时候,玩家需要看到其它在自己视野内玩家的英雄;需要看到在自己视野内的怪物;需要看到打BOSS掉落的物品;……。
有人会说:这还不简单,将场景内所有Obj的信息实时广播给其它玩家,这不就行了吗?!
当然这样的做法对于一些类似竞技场、擂台这样的玩法确实是一个最优的解决方法。毕竟在这个场景只有你们两个人。但是你能想像一下一个场景有几百个英雄,甚至几千个英雄时候(还不包括其它的Obj),它们每移动一步都向你的广播一下信息。下面用公式计算一下,假设场景有1000个英雄。每个英雄都向其它各个英雄广播自己的信息。也就是说一个每个英雄都要处理其它1000个英雄的实时信息(其实是999个,为了方便计算)。这样一来,服务器就需要实时处理一百万条信息了。但是如果服务器有对AOI作处理,玩家的视野大约只有50个英雄(AOI里有50个英雄),那么只需要这50个英雄向自己的英雄发送信息就可以了。那么服务器只需要实时处理2500条信息就可以。效率一下子提高了400倍,而且节约了网络开销。
下面就介绍实际应用中最常用的AOI处理方法--网格法。

这篇博文只是说清楚AOI网格法的原理,为以后写场景管理器的时候作一些理论的铺垫,所以这篇博文不会贴代码。


1、首先会将场景划分等大小的网格。
2、当玩家进入到场景的时候(无论是从传送点传送进来,还是飞进来的),会将玩家注册到某个网格,与此同时通过使用观察者模式,将新进来自己的英雄信息通知对这个网格感兴趣的其它英雄。懂Lua的可以看一下观察者模式lua实现: http://blog.csdn.net/yitouhan/article/details/15028301
3、与此同时,自己的英雄也有感兴趣的区域(AOI),因为感兴趣是相互的。如红色矩形A,他的感兴趣的区域就是包含它的4个网格;如果A移动到B,那么自己的英雄的感兴趣的区域就是1、2、3、4、5、6、7、8和9了。也就是说当上述区域的Obj发生改变的时候,都要通知自己的英雄。
4、那样要怎样才能快速找到AOI呢?可以从图中看出,这样划分成网格后,就会变成矩阵。我们可以将其保存成二维数组,这样就能在O(1)下定位到AOI了。
5、AOI的大小一般大于等于屏幕坐标大小。如果小于的话,在边缘的Obj将会看不见。(因为你都没有发消息给客户端)。
6、网格划分得太小,对内存开销较大;网格划分得太大,对CPU开销较大,因为由矩形B可以看出,需要将B的信息发到不在B的视野内的其它的Obj(注意这里说的是视野,AOI是那9个格子),大大增加了开销。

这篇关于游戏服务端之AOI概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605733

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储