SKYXY客服
x
第二章 arcalet教程 - 訊息發送與接收 | skyxy
快速建站
︿
TOP
首頁 > 入門學習 > 文章內容
第二章 arcalet教程 - 訊息發送與接收
7/8/2016
瀏覽數:1336
沈夜
2.0 大廳與私人訊息
連線遊戲必須依靠遠端的數據傳輸的方式交換資料,而arcalet也有提供了訊息傳遞功能,此章節介紹如何使用與接收其他人的訊息。
arcalet訊息傳送分為3部分:
    1.主大廳訊息
    2.私人訊息
    3.場景訊息

    這篇會先以 主大廳與私人訊息 作為範例。
    發送訊息的Api:
    接收訊息 API:
    發送訊息code:
    C#
    void Send(string msg)
        {
            ag.Send(msg);
        }
    
        void PrivacySend(string msg, int poid)
        {
            ag.PrivacySend(msg, poid);
        }
    
    登入時必須加入的函式 code:
    C#
    void ArcaletLaunch(string username, string password)
        {
            ag = new ArcaletGame(username, password, gguid, sguid, certificate);
            ag.onCompletion += CB_ArcaletLaunch;
            ag.onMessageIn += OnMessageIn;
            ag.onPrivateMessageIn += OnPrivateMessageIn;
            ag.Launch();
        }
    
    接收code:
    C#
    void OnMessageIn(string msg, int delay, ArcaletGame game)
        {
            //接收主大廳場景訊息的Function
            Debug.Log("reiceve MainMessageIn :" + msg);
        }
    
        void OnPrivateMessageIn(string msg, int delay, ArcaletGame game)
        {
            //接收私人訊息的Function
            Debug.Log("reiceve PrivateMessageIn :" + msg);
        }
    
    每個登入的賬號都會有自己的poid,只要別人有了你的poid,他就能通過發送私人訊息的方式傳遞資料給你
    ps: 可以通過ArcaletGame 的 poid 取得此數值
    下列是通過主大廳與私人訊息的傳遞畫面
    此篇範例位置: 
    Assets\Scene\2\2.0_Message
    2.1 自創場景訊息
    上一篇我們學習了如何使用私人與大廳場景訊息,現在我來學習如何處理自創場景的訊息。
    本範例中使用了自創的靜態場景來呈現。
    佈署一
    在新建場景的項目中新建一個靜態式場景來進行測試。
    這裡我們能分別使用兩種API 對應 靜態與動態 的場景類型。

    主要最大的差別是:
    靜態在使用一個 sguid 下只能存在一個房間。
    動態則在使用同一個 sguid 下能存在多個房間,其他玩家可以通過 scene ID 登入此房間。只要是玩家登入房間的情況下就能同時收到全部已經登入房間的訊息。
    API:
    範例Code:
    C#
    /// <summary>
        /// 登入一個場景
        /// </summary>
        /// <param name="sguid">場景sguid</param>
        /// <param name="SceneID">動態場景id</param>
        void LoginScene(string sguid,int SceneID)
        {
            //進入一個場景
            sn = new ArcaletScene(ag, sguid, SceneID);
            sn.onMessageIn = OnSceneMessageIn;
            sn.onCompletion = CB_EnterScene;
            sn.Launch();
        }
    
        /// <summary>
        /// 登入一個場景
        /// </summary>
        /// <param name="sguid">場景sguid</param>
        void LoginScene(string sguid)
        {
            //進入一個場景
            sn = new ArcaletScene(ag, sguid);
            sn.onMessageIn = OnSceneMessageIn;
            sn.onCompletion = CB_EnterScene;
            sn.Launch();
        }
    CallBack 範例Code:
    C#
    void CB_EnterScene(int code, ArcaletScene scene)
        {
            //Code為0表示進入場景成功
            if (code == 0)
            {
                Debug.Log("Enter Scene Successed - Sid:" + sn.sid);
            }
            //Code非0表示進入場景失敗
            else
            {
                Debug.LogWarning("Enter Scene Failed");
            }
        }
    由於如果不離線的話並不會從場景上斷開,像一些配對遊戲,如果要離開配對或房間,我們可以使用LeaveScene就能離開場景。
    範例Code:
    C#
    /// <summary>
        /// 離開遊戲場景
        /// </summary>
        void LeaveScene()
        {
            sn.Leave(CB_LeaveScene, null);
        }
    
    
        void CB_LeaveScene(int code, object token)
        {
            //code為0表示離開Scene成功
            if (code == 0)
            {
               Debug.LogWarning("Leave Scene Success");
            }
            //code非0表示離開Scene失敗
            else {
                Debug.LogWarning("Leave Scene Failed");
            }
        }
    測試:
    提示:
    此範例已經附帶動態場景的功能,開發者可以自行下載測試。
    此篇範例位置: 
    Assets\Scene\2\2.1_SceneMessage
    1
    2
     12_20160729143021.zip  (3.78 MB)
    您也可能喜歡這些文章
    留言給作者
    不公開此留言     登入即可留言
    讀者留言
    載入更多留言