服务器AOI

 这两天优化了一下一个Java页游服务器的AOI。其实这个优化纯属迫不得已,因为项目已经很久了,当时很多怪物还都是暗雷!!玩家在杀任务怪的时候,需要去地图里面乱转以碰见怪物。

      根据策划的要求,将怪物刷成明怪。就是要玩家看到,当然怪物不一定要动。,只是作为一个影像。既然是优化,那我就彻底优化一下喽;之前的广播是这样子做的,一个玩家的状态更新(比如说坐标更新,头衔更新,等)都是全场景广播,其他客户端根据接收到的广播验证坐标,再判断是不是需要处理这条消息!这样就造成了很大的浪费!这次我使用格子的思想进行优化!(或者说九宫格吧)

      这里有一个前提--可见关系----如果我能看到你,那么你也能看到我。根据游戏设计格子的大小,大概从30-60不等,可以调整;每个玩家在场景内即可看到周围九个格子的信息,包括里面的怪物和宠物。玩家自己状态的更新,要告知周围的玩家;而周围九个格子内的怪物或者玩家的状态更新,也要广播给这个玩家。这里还是要区分怪物和玩家,因为怪物对玩家可见,而玩家并不对怪物可见。为每个玩家每个怪物维护一个可见列表,即在自己的状态更新的时候,要将自己最新的状态告知这个列表上的玩家! 同时场景要记录每个格子上面的怪物和玩家,还可以添加npc或者宠物列表!

      

  基本流程:

      1:游戏服务器启动时候,要添加怪物到对应的格子中。

      2: 玩家登入时候,要获取周围九个格子的信息,并将自己,添加到格子中怪物和玩家的可见列表。同时将格子中的玩家,添加到自己的可见列表中。

      3:玩家走动时候,如果从一个格子走到了另一个格子,就要计算那些格子由可见变为不可见,并且解除与这些格子中怪物和玩家的可见关系。还要计算那些格子由不可见变为可见,那么就要和这些格子中的玩家建立可见关系。在上图做一个简单的展示,比如说玩家从红色小屋的位置走到橙色小屋的位置,那么紫色区域由可见变为不可见,而黄色区域由不可见变为可见。那么就要接触和橙色区域玩家的可见关系,而要和黄色区域的玩家建立可见关系!

      4:玩家登出时候,解除和周围九个格子中的玩家和怪物的可见关系!

注意事项:

      1:在计算格子由可见变为不可见或者由不可见变为可见,一定要注意边界关系

      2:由于我们的服务器是用线程池处理的,所以在维护场景格子怪物列表,格子玩家列表时候,一定要注意同步问题!

      3:怪物维护自己的可见列表,还可以做成主动怪物!!主动攻击玩家!

      欢迎探讨!!!

时间: 2025-01-19 07:57:10

服务器AOI的相关文章

游戏服务器与普通服务器有什么区别?

游戏在我们的日常生活中无处不在,可以说网络游戏在互联网时代成为我们排解压力,放松心情的重要途径.很多互联网公司都在游戏方面创新,在网游行业不断涌现属于这个时代的"独角兽".然而,说到游戏背后的那些事,首先就要谈到游戏服务器了,游戏服务器不仅需要支撑这么多人同时在线,并还必须且为用户提供良好的体验,这些是如何做到的呢?与普通服务器相比,游戏服务器有什么不同呢? 首先,游戏服务器与普通服务器相比较来说,游戏服务器需要能够保存更多的用户的状态.用户的等级等属性不用说,一般的IM服务也会有,还

在Linux上架设支持JSP+PHP的Web服务器

js|web|web服务|web服务器 近年来Linux在服务器市场占有比例日渐攀升,除了缘于Linux的免费和安全性之外,还因为Linux上的应用服务日益丰富.大部分常见的服务都在Linux上有了较好的解决方案.而对于Intenet上应用最广泛的Web服务来说,Linux的表现就更为出色.谁也无法说 清Internet上究竟有多少个网站,但在众多网站中,采用PHP和JSP开发的网站无疑占居了极大的市场份额.下面就介绍一下如何在Linux上架设支持JSP+PHP+MySQL的Web服务器. 对于

串口-如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票?

问题描述 如何通过android截取收银机的打印数据,组装后上传到后台服务器,然后把数据传到打印机打印小票? 如题.举个例子,收银机连接打印机实现收银.打印小票,现在想在中间接个硬件Android系统,截取打印数据上传到后台服务器,不对现有收银系统改造,不能影响正常收银. 注:该硬件两端通过串口/并口/usb连接收银机与打印机 解决方案 用小票打印机打印 解决方案二: 这种需要抓包的,安卓不可能.... 解决方案三: 这个你需要截取他的网络包就行了.

请教 Asterisk 服务器架设

问题描述 请教 Asterisk 服务器架设 大家好,请教一个Asterisk的问题. 由于项目测试的目的,需要在公网架设一个Asterisk服务器,作为VoIP的服务器.需要支持ICE协议,穿越对称式NAT(Symmetric NAT). PC客户端使用SIP通讯软件,实现在不同NAT的语音和视频对话. 希望Asterisk 配置经验的朋友,多多指教! 解决方案 参考:http://www.360doc.com/content/13/0827/11/13654078_310207980.sht

android 如何通过接口向服务器上传视频

问题描述 android 如何通过接口向服务器上传视频 在搞一个小项目 需要用到 新手 没接触过 希望会的朋友提供一个Demo 谢谢! 解决方案 你就找一个上传文件的例子就行了,不管你是视频还是图片,都一样的方式 解决方案二: http://www.cnblogs.com/top5/archive/2013/03/07/2947344.html

导入-附加数据库对于服务器失败 5120

问题描述 附加数据库对于服务器失败 5120 我已经将SQL文件属性完全控制了还是没法附加,是没有获取管理员权限才出现的问题,还是我要导入的文件适用于2000版, 我的是SQL server2008版的所以不行呢? 解决方案 SQL Server 2008完全可以附加2000的数据库. 参考这个试试:http://zhidao.baidu.com/link?url=Bc6C53XPUm26C0IL6_qB_bVLd-QZgouZXDThB3AKC-amGWT3YSgi2HdDd3cAiGZw9m

服务器-开发板外网连接 局域网可以通信

问题描述 开发板外网连接 局域网可以通信 开发板可以ping通百度 但与电脑服务器程序连接不了 pc客户端可以和服务器连接 程序用qt写的 外网连接 局域网已经可以通信 解决方案 电脑服务器,是公网的 IP,还是局域网的 IP? 如果是公网,应该与 百度 等是一样的,可以通讯才对!这个问题与使用什么开发的程序没有关系,Socket 等应该是标准的,与操作系统.开发工具没有关系的. 可以考虑先在电脑服务器弄一个抓包工具,看看数据是否有从开发板发送到电脑服务器吧. 解决方案二: 电脑服务器是公网ip

怎么将域名直接指向阿里云服务器上tomcat服务器下的应用

问题描述 怎么将域名直接指向阿里云服务器上tomcat服务器下的应用 而不是通过www.xxx.com:8080/webapp,不用nginx可以吗,新手求教........ 解决方案 域名指向阿里服务器的公网ip 你的tomcat配置使用80端口(而不是8080端口),如果有iis等别的web server占用了端口,先禁用它们. 防火墙允许80端口 域名和服务器备案 其它问题,可以问阿里的客服. 解决方案二: 可以啊,,直接用域名绑定你的阿里云服务器的公网ip就好了

在Ubuntu Linux上架设Web服务器详解

Apache 是一种功能强大的Web服务器.如今,Internet上无数运行在Linux上的Apache服务器正为Web世界的日益繁荣提供着有力的支撑.本文将向读者介绍如何在Ubuntu Linux系统迅速搭建Apache Web服务器. 尽管Ubuntu 是一种新兴的Linux分支,但Ubuntu 组织却为Apache提供了丰富的支持软件,这些软件都可以从发行版的光盘获取,也可以从官方站点轻松下载.所以,Ubuntu非常适合作为Web服务器的平台. 一. 安装Apache 下面,我们首先介绍如