アルゴリズムを考えMMORPGサーバシーンAOI

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/lwtbn1/article/details/37961695

     MMORPG最近のモバイルプラットフォーム上でプロジェクトをやって、サーバが作業を担当し、ゲームサーバーのこのタイプの開発を行うために初めて、仕事の準備ができている必要があり、総合的なオンライン情報や自分のアイデア、AOIの何実現まとめ方法は、以下の三つの側面について話をします。リミテッド、提案された実装は非常に厄介かもしれませんが、一般的なシーンがまだ可能である満たしています。
       プレイヤーのモンスター上のアクティブな攻撃が検出1は、
シーン内のNモンスター、Mのプレイヤーが存在する場合、そのテストが、この方法は愚か、選手とN * M倍のモンスターとの距離を計算するために必要です。新しいアプローチがされています。まず、次の図に分けたゲームのシーンを見て、シーンはいくつかの正方形に分割され、各グリッドは、固有の番号gridIdは、白い星がプレイヤーの現在位置を表している、プレイヤーはの代わりに赤いグリッドがあります現在のグリッドにmonsterListとplayerList、二つのリストを記録モンスターやプレイヤー:黄色のグリッド領域には、各サーバーのメッシュオブジェクトには、二つのリストを維持し、隣接する8つのエリアです。

 

     プレイヤがシーンに入るときに、プレイヤーは、現在メッシュID(curGridId)はgridId赤色メッシュ、プレイヤadjacentGridList周囲に配置8メッシュ黄色gridIdを配置存在します。特定のモンスターの攻撃検出プロセス:

 

 

     このプロセスの利点は次のとおりです。

     (1)選手が移動する場合にのみ、プレイヤは、アクティブな攻撃モンスター検出あろう。不要な検出を回避します。

     (2)    减少了计算怪物和玩家距离的次数,如一开始所述,如果场景内有N个怪物,M个玩家,则进行一次检测需要计算N*M次距离。该方法首先在场景更新线程中判断玩家是否从网格g1进入网格g2,判断时会与周围8个格子的中心点计算,最差的情况是计算8次,但是此处也可以优化,如果知道玩家的移动向量,则只进行一次计算就可以确定玩家是否跨越了格子。怪物攻击玩家检测线程中,只计算玩家当前所在的格子中的怪物与玩家的距离,计算次数为(假设每个格子中怪物和玩家平均分布):(N/格子数量)*(M/格子数量)。

     2、怪物移动控制
     游戏中会单独启动一个线程(T_MonsterMove)去执行怪物移动的操作,该线程属于定时线程,以1秒或更短的频率根据怪物的类型更新怪物的位置。并将移动后怪物的坐标信息发送给客户端,T_MonsterMove线程并不需要和主逻辑线程进行同步操作,因为T_MonsterMove线程中移动的怪物都是处于服务器托管的,怪物主动攻击线程检测到玩家进入怪物攻击范围后,会将该怪物从服务器托管列表中移除,交由客户端托管。
     3、怪物和玩家移动等信息的广播范围
在游戏中,我们把格子的大小定义为玩家360度视野的范围。adjacentGridList保存的是玩家相邻的8个格子id和curGridId保存的是当前玩家所在的格子的id。以玩家移动信息为例,只需要将消息发送给这9个格子中的玩家即可。将信息发送给相邻的8个格子的玩家可以避免玩家突然闪进视野的情况发生。


おすすめ

転載: www.cnblogs.com/xuxinstyle/p/11210071.html