提示框功能:
public class TipPanel : PanelBase
{
    private Text text;
    private Button btn;
    string str = "" ;
    #region 生命周期
    //初始化
    public override void Init( params object [] args)
    {
        base .Init(args);
        skinPath = "TipPanel" ;
        layer = PanelLayer .Tips;
        //参数 args[1]代表提示的内容
        if (args.Length == 1)
        { //获取第一个参数,既要显示的内容
            str = ( string )args[0];
        }
    }
    //显示之前
    public override void OnShowing()
    {
        base .OnShowing();
        Transform skinTrans = skin.transform;
        //文字
        text = skinTrans.Find( "Text" ).GetComponent< Text >();
        text.text = str;
        //关闭按钮
        btn = skinTrans.Find( "Btn" ).GetComponent< Button >();
        btn.onClick.AddListener(OnBtnClick);
    }
    #endregion
    //按下“知道了”按钮的事件
    public void OnBtnClick()
    {
        Close();
    }
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class RoomListPanel : PanelBase
{
    private Text idText;
    private Text winText;
    private Text lostText;
    private Transform content;
    private GameObject roomPrefab;
    private Button closeBtn;
    private Button newBtn;
    private Button reflashBtn;
    #region 生命周期
    /// <summary> 初始化 </summary>
    public override void Init( params object [] args)
    {
        base .Init(args);
        skinPath = "RoomListPanel" ;
        layer = PanelLayer .Panel;
    }
        /// <summary>
        /// 获取组件
        /// </summary>
    public override void OnShowing()
    {
        base .OnShowing();
        //获取Transform
        Transform skinTrans = skin.transform;
        Transform listTrans = skinTrans.Find( "ListImage" );
        Transform winTrans = skinTrans.Find( "WinImage" );
        //获取成绩栏部件
        idText = winTrans.Find( "IDText" ).GetComponent< Text >();
        winText = winTrans.Find( "WinText" ).GetComponent< Text >();
        lostText = winTrans.Find( "LostText" ).GetComponent< Text >();
        //获取列表栏部件
        Transform scroolRect = listTrans.Find( "ScrollRect" );
        content = scroolRect.Find( "Content" );
               //拿到房间预制体  隐藏
        roomPrefab = content.Find( "RoomPrefab" ).gameObject;
        roomPrefab.SetActive( false );
        closeBtn = listTrans.Find( "CloseBtn" ).GetComponent< Button >();
        newBtn = listTrans.Find( "NewBtn" ).GetComponent< Button >();
        reflashBtn = listTrans.Find( "ReflashBtn" ).GetComponent< Button >();
        //按钮事件
        reflashBtn.onClick.AddListener(OnReflashClick);
        newBtn.onClick.AddListener(OnNewClick);
        closeBtn.onClick.AddListener(OnCloseClick);
        //监听
        NetMgr .srvConn.msgDist.AddListener( "GetAchieve" , RecvGetAchieve);
        NetMgr .srvConn.msgDist.AddListener( "GetRoomList" , RecvGetRoomList);
        //发送查询
        ProtocolBytes protocol = new ProtocolBytes ();
        protocol.AddString( "GetRoomList" );
        NetMgr .srvConn.Send(protocol);
        protocol = new ProtocolBytes ();
        protocol.AddString( "GetAchieve" );
        NetMgr .srvConn.Send(protocol);
    }
    public override void OnClosing()
    {
        NetMgr .srvConn.msgDist.DelListener( "GetAchieve" , RecvGetAchieve);
        NetMgr .srvConn.msgDist.DelListener( "GetRoomList" , RecvGetRoomList);
    }
    #endregion
        //获取玩家成绩
    //收到GetAchieve协议
    public void RecvGetAchieve( ProtocolBase protocol)
    {
        //解析协议
        ProtocolBytes proto = ( ProtocolBytes )protocol;
        int start = 0;
        string protoName = proto.GetString(start, ref start);
        int win = proto.GetInt(start, ref start);
        int lost = proto.GetInt(start, ref start);
        //处理
        idText.text = "指挥官:" + GameMgr .instance.id;
        winText.text = win.ToString();
        lostText.text = lost.ToString();
    }
        //收到GetRoomList协议    房间列表  房间数量  房间信息1  房间信息2.。。
        public void RecvGetRoomList( ProtocolBase protocol)
    {
        //清理
        ClearRoomUnit();
        //解析协议
        ProtocolBytes proto = ( ProtocolBytes )protocol;
        int start = 0;
        string protoName = proto.GetString(start, ref start);
        int count = proto.GetInt(start, ref start);
        for ( int i = 0; i < count; i++)
        {
            int num = proto.GetInt(start, ref start); //玩家数量
            int status = proto.GetInt(start, ref start); //房间数量
            GenerateRoomUnit(i, num, status); //创建一个房间
        }
    }
    public void ClearRoomUnit()
    {
        for ( int i = 0; i < content.childCount; i++)
            if (content.GetChild(i).name.Contains( "Clone" ))
                Destroy(content.GetChild(i).gameObject);
    }
    //创建一个房间单元
    //参数 i,房间序号(从0开始)
    //参数num,房间里的玩家数
    //参数status,房间状态,1-准备中 2-战斗中
    public void GenerateRoomUnit( int i, int num, int status)
    {
        //添加房间
        content.GetComponent< RectTransform >().sizeDelta = new Vector2 (0, (i + 1) * 110);
        GameObject o = Instantiate(roomPrefab);
        o.transform.SetParent(content);
        o.SetActive( true );
        //房间信息
        Transform trans = o.transform;
        Text nameText = trans.Find( "nameText" ).GetComponent< Text >();
        Text countText = trans.Find( "CountText" ).GetComponent< Text >();
        Text statusText = trans.Find( "StatusText" ).GetComponent< Text >();
        nameText.text = "序号:" + (i + 1).ToString();
        countText.text = "人数:" + num.ToString();
        if (status == 1) //1准备中
        {
            statusText.color = Color .black;
            statusText.text = "状态:准备中" ;
        }
        else //2开战中
        {
            statusText.color = Color .red;
            statusText.text = "状态:开战中" ;
        }
        //按钮事件
        Button btn = trans.Find( "JoinButton" ).GetComponent< Button >();
        btn.name = i.ToString();   //改变按钮的名字,以便给OnJoinBtnClick传参
        btn.onClick.AddListener( delegate ()
        {
            OnJoinBtnClick(btn.name);
        }
        );
    }
    //刷新按钮
    public void OnReflashClick()
    { //发送刷新协议
        ProtocolBytes protocol = new ProtocolBytes ();
        protocol.AddString( "GetRoomList" );
        NetMgr .srvConn.Send(protocol);
    }
    //加入按钮   加入协议,我们向服务端发送“加入协议”协议添加要加入房间序号,此处利用观察者模式,监听返回的协议,解析协议是否加入成功,成功则实例化房间面板,服务端在玩家加入或离开房,间向房间里广播刷新房间信息的协议(我们还是利用观察者模式监听更新房间信息的协议,收到之后执行更新面板方法),以便客户端更新界面。
    public void OnJoinBtnClick( string name)
    {
        ProtocolBytes protocol = new ProtocolBytes ();
        protocol.AddString( "EnterRoom" ); //加入房间协议
        protocol.AddInt( int .Parse(name)); //加入房间序号
        NetMgr .srvConn.Send(protocol, OnJoinBtnBack); //回掉  返回加入结果 0加入成功  -1失败
        Debug .Log( "请求进入房间 " + name);
    }
        //加入按钮的回掉  返回加入结果 0加入成功  -1失败
        public void OnJoinBtnBack( ProtocolBase protocol)
    {
        //解析参数
        ProtocolBytes proto = ( ProtocolBytes )protocol;
        int start = 0;
        string protoName = proto.GetString(start, ref start);
        int ret = proto.GetInt(start, ref start);
        //处理
        if (ret == 0)
        {
            PanelMgr .instance.OpenPanel< TipPanel >( "" , "成功进入房间!" );
            PanelMgr .instance.OpenPanel< RoomPanel >( "" );
            Close();
        }
        else
        {
            PanelMgr .instance.OpenPanel< TipPanel >( "" , "进入房间失败" );
        }
    }
    //新建按钮
    public void OnNewClick()
    {
        ProtocolBytes protocol = new ProtocolBytes ();
        protocol.AddString( "CreateRoom" );
        NetMgr .srvConn.Send(protocol, OnNewBack);
    }
    //新建按钮返回
    public void OnNewBack( ProtocolBase protocol)
    {
        //解析参数
        ProtocolBytes proto = ( ProtocolBytes )protocol;
        int start = 0;
        string protoName = proto.GetString(start, ref start);
        int ret = proto.GetInt(start, ref start);
        //处理
        if (ret == 0)
        {
            PanelMgr .instance.OpenPanel< TipPanel >( "" , "创建成功!" );
            PanelMgr .instance.OpenPanel< RoomPanel >( "" );
            Close();
        }
        else
        {
            PanelMgr .instance.OpenPanel< TipPanel >( "" , "创建房间失败!" );
        }
    }
    //登出按钮
    public void OnCloseClick()
    {
        ProtocolBytes protocol = new ProtocolBytes ();
        protocol.AddString( "Logout" );
        NetMgr .srvConn.Send(protocol, OnCloseBack);
    }
    //登出返回
    public void OnCloseBack( ProtocolBase protocol)
    {
        PanelMgr .instance.OpenPanel< TipPanel >( "" , "登出成功!" );
        PanelMgr .instance.OpenPanel< LoginPanel >( "" , "" );
        NetMgr .srvConn.Close();
    }
}

坦克大战 第九章 房间系统相关推荐

  1. 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记

    计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...

  2. 坦克大战java_清华毕业大佬用一个坦克大战项目讲完了23种设计模式

    先给大家讲述一下坦克大战是怎么进行运行的. 坦克大战第一节: new 出一个窗口: 设定标题栏内容: TankFrame从Frame继承+显示: 认识paint方法,重写: 坦克大战第二节 学习gra ...

  3. 帧同步坦克大战匹配系统

    在介绍匹配系统之前,先说一下项目的整体结构. 项目主要有四个场景: start --> home --> choose --> game start_scene: 是游戏的开始场景, ...

  4. java坦克大战 实训报告_坦克大战系统《Java程序开发实训》综合实训报告.doc

    坦克大战系统<Java程序开发实训>综合实训报告 <Java程序开发实训>综合实训报告 题目: 坦克大战系统 姓名: 方庆 学号: 2010203206 班级: 10软件(2) ...

  5. 【计算机系统和网络安全技术】第九章:防火墙与入侵防御系统

    第九章:防火墙与入侵防御系统 1.防火墙的必要性 与Internet的连接性的非常重要的 • 会对机构产生威胁 • 保护局域网的一种有效方式 • 防火墙设置在驻地网和 Internet 之间,以建立二 ...

  6. VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

    VLSI数字信号处理系统--第九章滤波器和变换中的算法强度缩减 作者:夏风喃喃 参考: (1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著 (2) socvista ...

  7. 慕课嵌入式系统(第九章.ucos-ii操作系统实验)

    慕课电子科技大学.嵌入式系统.第九章.嵌入式实时操作系统实验.ucos-ii操作系统实验 0 目录 9 嵌入式实时操作系统实验 9.1 ucos-ii操作系统实验 9.1.1课堂重点 9.1.2测试与 ...

  8. JavaStudy7(18章-坦克大战2)—B站韩顺平

    JavaStudy7(18章-坦克大战2)-B站韩顺平 1.坦克大战 1.1线程-应用到坦克大战 1.1.1 坦克大战 0.3 代码演示: //为了监听 键盘事件, 实现 KeyListener pu ...

  9. 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统

    对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...

最新文章

  1. Spring Security 5.5发布,正式实装OAuth2.0的第五种授权模式
  2. 旧金山GDC2008见闻一
  3. ArcGIS 基础11-专题制图
  4. [LeetCode_5] Longest Palindromic Substring
  5. 2019 微软Build大会预告:值得开发者期待的是哪些?
  6. 使用Jupyter Notebook+bokeh绘图入门完整步骤
  7. 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
  8. PHP导出CSV文件出现乱码的解决方法
  9. ubuntu 14.04 安装minidwep-gtk
  10. 如何将Word转换成PDF的几种使用方法
  11. Coverity介绍以及典型缺陷说明
  12. oracle select into from 用法,sql select into用法
  13. 【源码+图片素材】1小时做出Java坦克大战小游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java课程设计_课设
  14. CPU卡一卡通解决方案
  15. ps 的一些常见的键位技巧
  16. 如何看待 Google 最新的系统 Fuchsia?
  17. 解决问题就是有成就感
  18. 一款开源的指纹识别SDK
  19. 代码大全(Code Complete)-- 目录和关键点
  20. 使用达思SQL数据库修复软件导出数据库时的接收数据的数据库如何清空表数据?...

热门文章

  1. 机器学习入门之糖尿病预测——ML-sklearn
  2. 自媒体什么内容最赚钱?哪些平台收益高?
  3. 数据分析师到底是干啥的?数据分析值不值得学
  4. VS2010对C++11的支持程度
  5. linux加载动态库问题
  6. 消费贷、现金贷、消费金融、供应链金融
  7. 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程
  8. JavaWeb——AJAX(2)
  9. Android Studio环境搭建及红米真机建工程测试
  10. MATLAB中smoothdata函数使用