提示框功能:
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();
}
}
坦克大战 第九章 房间系统相关推荐
- 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记
计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...
- 坦克大战java_清华毕业大佬用一个坦克大战项目讲完了23种设计模式
先给大家讲述一下坦克大战是怎么进行运行的. 坦克大战第一节: new 出一个窗口: 设定标题栏内容: TankFrame从Frame继承+显示: 认识paint方法,重写: 坦克大战第二节 学习gra ...
- 帧同步坦克大战匹配系统
在介绍匹配系统之前,先说一下项目的整体结构. 项目主要有四个场景: start --> home --> choose --> game start_scene: 是游戏的开始场景, ...
- java坦克大战 实训报告_坦克大战系统《Java程序开发实训》综合实训报告.doc
坦克大战系统<Java程序开发实训>综合实训报告 <Java程序开发实训>综合实训报告 题目: 坦克大战系统 姓名: 方庆 学号: 2010203206 班级: 10软件(2) ...
- 【计算机系统和网络安全技术】第九章:防火墙与入侵防御系统
第九章:防火墙与入侵防御系统 1.防火墙的必要性 与Internet的连接性的非常重要的 • 会对机构产生威胁 • 保护局域网的一种有效方式 • 防火墙设置在驻地网和 Internet 之间,以建立二 ...
- VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减
VLSI数字信号处理系统--第九章滤波器和变换中的算法强度缩减 作者:夏风喃喃 参考: (1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著 (2) socvista ...
- 慕课嵌入式系统(第九章.ucos-ii操作系统实验)
慕课电子科技大学.嵌入式系统.第九章.嵌入式实时操作系统实验.ucos-ii操作系统实验 0 目录 9 嵌入式实时操作系统实验 9.1 ucos-ii操作系统实验 9.1.1课堂重点 9.1.2测试与 ...
- JavaStudy7(18章-坦克大战2)—B站韩顺平
JavaStudy7(18章-坦克大战2)-B站韩顺平 1.坦克大战 1.1线程-应用到坦克大战 1.1.1 坦克大战 0.3 代码演示: //为了监听 键盘事件, 实现 KeyListener pu ...
- 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统
对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...
最新文章
- Spring Security 5.5发布,正式实装OAuth2.0的第五种授权模式
- 旧金山GDC2008见闻一
- ArcGIS 基础11-专题制图
- [LeetCode_5] Longest Palindromic Substring
- 2019 微软Build大会预告:值得开发者期待的是哪些?
- 使用Jupyter Notebook+bokeh绘图入门完整步骤
- 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
- PHP导出CSV文件出现乱码的解决方法
- ubuntu 14.04 安装minidwep-gtk
- 如何将Word转换成PDF的几种使用方法
- Coverity介绍以及典型缺陷说明
- oracle select into from 用法,sql select into用法
- 【源码+图片素材】1小时做出Java坦克大战小游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java课程设计_课设
- CPU卡一卡通解决方案
- ps 的一些常见的键位技巧
- 如何看待 Google 最新的系统 Fuchsia?
- 解决问题就是有成就感
- 一款开源的指纹识别SDK
- 代码大全(Code Complete)-- 目录和关键点
- 使用达思SQL数据库修复软件导出数据库时的接收数据的数据库如何清空表数据?...
热门文章
- 机器学习入门之糖尿病预测——ML-sklearn
- 自媒体什么内容最赚钱?哪些平台收益高?
- 数据分析师到底是干啥的?数据分析值不值得学
- VS2010对C++11的支持程度
- linux加载动态库问题
- 消费贷、现金贷、消费金融、供应链金融
- 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程
- JavaWeb——AJAX(2)
- Android Studio环境搭建及红米真机建工程测试
- MATLAB中smoothdata函数使用