<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 7.1 世界管理模塊 現在需要一個管理當前世界所有玩家的一個管理器,管理器應該擁有全部的當前在線玩家信息和當前世界的AOI劃分規則。方便玩家與玩家之間進行聊天,同步位置等功能。 首先,在創建一個`world_manager.go`文件作為世界管理器模塊。 > mmo\_game/core/world\_manager.go ```go package core import ( "sync" ) /* 當前游戲世界的總管理模塊 */ type WorldManager struct { AoiMgr *AOIManager //當前世界地圖的AOI規劃管理器 Players map[int32]*Player //當前在線的玩家集合 pLock sync.RWMutex //保護Players的互斥讀寫機制 } //提供一個對外的世界管理模塊句柄 var WorldMgrObj *WorldManager //提供WorldManager 初始化方法 func init() { WorldMgrObj = &WorldManager{ Players: make(map[int32]*Player), AoiMgr: NewAOIManager(AOI_MIN_X, AOI_MAX_X, AOI_CNTS_X, AOI_MIN_Y, AOI_MAX_Y, AOI_CNTS_Y), } } //提供添加一個玩家的的功能,將玩家添加進玩家信息表Players func (wm *WorldManager) AddPlayer(player *Player) { //將player添加到 世界管理器中 wm.pLock.Lock() wm.Players[player.Pid] = player wm.pLock.Unlock() //將player 添加到AOI網絡規劃中 wm.AoiMgr.AddToGridByPos(int(player.Pid), player.X, player.Z) } //從玩家信息表中移除一個玩家 func (wm *WorldManager) RemovePlayerByPid(pid int32) { wm.pLock.Lock() delete(wm.Players, pid) wm.pLock.Unlock() } //通過玩家ID 獲取對應玩家信息 func (wm *WorldManager) GetPlayerByPid(pid int32) *Player { wm.pLock.RLock() defer wm.pLock.RUnlock() return wm.Players[pid] } //獲取所有玩家的信息 func (wm *WorldManager) GetAllPlayers() []*Player { wm.pLock.RLock() defer wm.pLock.RUnlock() //創建返回的player集合切片 players := make([]*Player, 0) //添加切片 for _, v := range wm.Players { players = append(players, v) } //返回 return players } ``` 該模塊主要是將AOI和玩家做了一層統一管理,起到協調其他模塊的中間功能。其中有一個全局變量`WorldMgrObj`是對外開放的管理模塊句柄。供其他模塊使用。 現在我們應該在玩家上線的時候,也將玩家添加到`WorldMgrObj`中。 > mmo\_game/server.go ```go //當客戶端建立連接的時候的hook函數 func OnConnecionAdd(conn ziface.IConnection) { //創建一個玩家 player := core.NewPlayer(conn) //同步當前的PlayerID給客戶端, 走MsgID:1 消息 player.SyncPid() //同步當前玩家的初始化坐標信息給客戶端,走MsgID:200消息 player.BroadCastStartPosition() //========將當前新上線玩家添加到worldManager中 core.WorldMgrObj.AddPlayer(player) //======================================== fmt.Println("=====> Player pidId = ", player.Pid, " arrived ====") } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看