好久没写了,这个月普遍比较忙,然后也完善了很多TGUI里面的东西,反正是对于目前的项目而言是够用了。
复杂的按钮框:CGUIComplexButton,这个类实现的是一个有多组按钮状态皮肤的复杂按钮,可以完成例如,点击之后按钮变成另外一个样子,类似CheckBox,但是不同的是,CGUIComplexButton的实质是一个按钮,然后状态的转换会更自然。下面是实现的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace Assets.TGUI.UIScript
{
/// <summary>
/// 较为复杂的按钮类
/// 有多个按钮状态
/// </summary>
class CGUIComplexButton : CGUIButton
{
public Sprite[] m_normalSps = null; //弹起时Sprite
public Sprite[] m_overSps = null; //悬停时Sprite
public Sprite[] m_clickSps = null; //点击时Sprite
public Sprite[] m_disableSps = null; //禁用时Sprite
/// <summary>
/// 设置正常的图片
/// </summary>
/// <param name="index"></param>
void SetNormalSprite(int index)
{
if (m_normalSps[index] != null)
{
m_normalSp = m_normalSps[index];
this.GetComponent<SpriteRenderer>().sprite = m_normalSp;
}
}
/// <summary>
/// 设置鼠标悬停的图片
/// </summary>
/// <param name="index"></param>
void SetOverSprite(int index)
{
if (m_overSps[index] != null)
{
m_overSp = m_overSps[index];
}
}
/// <summary>
/// 设置点击的图片
/// </summary>
/// <param name="index"></param>
void SetClickSprite(int index)
{
if (m_clickSps[index] != null)
{
m_clickSp = m_clickSps[index];
}
}
/// <summary>
/// 设置禁止点击的图片
/// </summary>
/// <param name="index"></param>
void SetDisableSprite(int index)
{
if (m_disableSps[index] != null)
{
m_disableSp = m_disableSps[index];
}
}
/// <summary>
/// 设置精灵图片
/// </summary>
/// <param name="index"></param>
public void SetSprite(int index)
{
SetNormalSprite(index);
SetOverSprite(index);
SetClickSprite(index);
SetDisableSprite(index);
}
}
}
封装得不是很好,比较容易出错,下面说一下使用方法。首先至少将一组状态按钮的图片拖入m_normalSps,m_overSps 等数组中,然后调用方式如下:
1.添加按钮监听
protected virtual void Start()
{
m_TrusteeshipButton.GetComponent<CGUIComplexButton>().TouchEnd += Trusteeship_TouchEnd;
}
2.在回调函数中
/// <summary>
/// 设置取消托管图片和托管状态(点击托管后 服务器确认托管成功的回调)
/// </summary>
protected void SetTrusteeship()
{
m_IsTrusteeship = true;
m_TrusteeshipButton.GetComponent<CGUIComplexButton>().SetSprite(1);
}
/// <summary>
/// 设置托管图片和非托管状态(点击取消托管后 服务器确认取消托管成功的回调)
/// </summary>
protected void SetCancelTrusteeship()
{
m_IsTrusteeship = false;
m_TrusteeshipButton.GetComponent<CGUIComplexButton>().SetSprite(0);
}
/// <summary>
/// 点击托管之后
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Trusteeship_TouchEnd(ScriptObject sender, TouchEndEventArgs e)
{
Debug.Log("MSG:点击了托管按钮");
if(m_IsTrusteeship == false)
SetTrusteeship();
else
SetCancelTrusteeship(),
}