<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 十、玩家下線 那么玩家客戶端點擊關閉應該觸發玩家下線的功能.玩家應該在其他的客戶端消失。具體流程如下: ![](/assets/25-zinx游戲案例-玩家下線.png)玩家下線,這里采用了`MsgID:201`消息。觸發該流程的時機是客戶端與服務端斷開鏈接,那么我們就可以在連接斷開前的Hook方法中,實現此業務. > mmo\_game/server.go ```go //當客戶端斷開連接的時候的hook函數 func OnConnectionLost(conn ziface.IConnection) { //獲取當前連接的Pid屬性 pid, _ := conn.GetProperty("pid") //根據pid獲取對應的玩家對象 player := core.WorldMgrObj.GetPlayerByPid(pid.(int32)) //觸發玩家下線業務 if pid != nil { player.LostConnection() } fmt.Println("====> Player ", pid , " left =====") } func main() { //創建服務器句柄 s := znet.NewServer() //注冊客戶端連接建立和丟失函數 s.SetOnConnStart(OnConnecionAdd) // ========== 注冊 hook 函數 ===== s.SetOnConnStop(OnConnectionLost) // ============================== //注冊路由 s.AddRouter(2, &api.WorldChatApi{}) s.AddRouter(3, &api.MoveApi{}) //啟動服務 s.Serve() } ``` 然后我們就要給player模塊提供一個`LostConnection()`方法。 > mmo\_game/core/player.go ```go //玩家下線 func (p *Player) LostConnection() { //1 獲取周圍AOI九宮格內的玩家 players := p.GetSurroundingPlayers() //2 封裝MsgID:201消息 msg := &pb.SyncPid{ Pid:p.Pid, } //3 向周圍玩家發送消息 for _, player := range players { player.SendMsg(201, msg) } //4 世界管理器將當前玩家從AOI中摘除 WorldMgrObj.AoiMgr.RemoveFromGridByPos(int(p.Pid), p.X, p.Z) WorldMgrObj.RemovePlayerByPid(p.Pid) } ``` 接下來我們啟動服務器,再啟動兩個客戶端分別測試一下結果。 ![](https://img.kancloud.cn/29/53/2953c0d2a58edac9c188a2352939e7c0_1594x676.png) ![](/assets/27-zinx游戲案例-玩家線下2.png)當我們退出一個客戶端的時候,另外一個客戶端的玩家的地圖已經會摘除當前玩家了。
                  <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>

                              哎呀哎呀视频在线观看