1,ui控件列表:
class GuiControl; //基本控件
class GuiGroupCtrl; //组控件
class GuiGroupTargetCtrl; //目标组控件
class GuiButtonCtrl; //按钮
class GuiRadioCtrl; //单选
class GuiTabCtrl; //活页
class GuiTableCtrl; //表格
class GuiSpinCtrl; //微调
class GuiProgressBarCtrl; //进度条
class GuiComboxCtrl; //下拉框
class GuiScrollBarCtrl; //滚动盒
class GuiScrollBagCtrl; //滚动条
class GuiListCtrl; //列表
class GuiTreeCtrl; //树
class GuiFastTreeCtrl; //简易树
class GuiEditCtrl; //文本编辑
class GuiEditRectCtrl; //文本编辑多行
class GuiRichTextCtrl; //富文本显示
class GuiRichEditCtrl; //富文本编辑
class GuiCodeEditCtrl; //代码编辑
class GuiMovieCtrl; //3d
class GuiParticleCtrl; //粒子
class GuiTextureNumCtrl; //数字
class GuiDragIconCtrl; //可拖动图标
class GuiTimeLineCtrl; //时间轴
class GuiLineCtrl; //线段
class GuiDiagramCtrl; //流程图
class GuiHtmlCtrl; //浏览器
2,基本使用:
ui资源文件可以使用.gui和.xml两种格式,.gui类似于.xml也是嵌套格式,.gui格式实现了一些类似c++的预处理。控件组(group)可以嵌套子控件组和子控件,像文件夹可以嵌套子文件夹和子文件一样以便于管理(示例见附录)。可以配合notepad++或UI编辑器来编辑ui资源文件。
template<typename T>
void MAPCTRL(T& ctrl,const char* name)
{
GuiControl* temp = GetCtrl(name);
ctrl = dynamic_cast<T> (GetCtrl(name));
}
通过路径映射控件句柄,可以使用通配符 * 来匹配控件的路径: ../表示上一层相对路径,$表示绝对根路径:
// "../../aa.bb.cc" ../只能在开头且连续
//"$.aa.bb.cc" $表示root(guimgr)
//"../*.aa.bb.cc" 也是可以的
// "$.*.aa.*.cc" 也是可以的
提供一系列接口来设置控件的各个属性,同时提供了一个万能接口,该接口同时适用于简化脚本绑定
//!万能接口 根据字符串解析设置属性
LoadState FormatProperty(const char* data);
控件的基本属性:
enum AlignTypeW
{
ATW_LEFT = 0,//左对齐
ATW_RIGHT , //右对齐
ATW_CENTER, //居中对齐
ATW_PERSENT //百分比对齐
};
enum ExtendType
{
ET_PIXCEL = 0, //像素大小
ET_PERSENT, //百分比大小
ET_ONEMINUSPIXEL, //实际大小=父窗口大小-配置大小
};
String m_idName; //名字
String m_tips; //提示
//!声音
String m_wakeSoundName;
bool m_wakeSoundLoop;
String m_clickSoundName;
//!res texture
String m_textureName[GCS_NUM]; //纹理
Color m_color [GCS_NUM]; //颜色
RectF m_uvwh [GCS_NUM]; //uv
String m_frameHeaderName[GCS_NUM];//动画
int m_opacityType; //混合模式
eExpandTexType m_expandTexType; //纹理扩充模式
String m_luaScriptFun; //脚本
//!相对父窗口,转换前,可能是百分比或右对齐等
RectF m_ctrlRectFlex; //位置
AlignTypeH m_alignTypeH; //对齐方式
AlignTypeW m_alignTypeW;
ExtendType m_extendTypeH; //大小方式
ExtendType m_extendTypeW;
bool m_canHit; //是否可点击
bool m_doClip; //是否对自身和子控件执行遮罩
bool m_beClip; //是否接受父控件遮罩
float m_rot;
bool m_bCircle; //圆形
bool m_bVisible;
bool m_bEnable;
bool m_dragable; //可被拖动
bool m_sizeable; //可变大小
通过重载虚函数实现回调:
virtual bool ProcButtonUp (GuiButtonCtrl *ctrl);
......
也可以使用Callback添加自定义回调:
button->CallBack()->Add("MouseUp",this,&LoginGui::OnButton_Start,"start");
template<class T>
void AddCtrlCallBack(const char* name,const char* command,T*obj,int (T::*OnCBCommand)(const char* args, void* argp), const char* args,void* argp=NULL)
{
GuiControl* ctrl;
MAPCTRL(ctrl,name);
if (ctrl)
{
if(argp==NULL)argp = ctrl;
ctrl->CallBack()->Add(command,obj,OnCBCommand, args, argp);
}
}
3,继承关系:
在配置文件中可以通过inherit关键字设置继承关系。比如如下设置inherit = "$Button.Text",则fire按钮控件继承$Button.Text控件的所有属性。fire控件与父控件(ButtonDefault)相同的属性即可省略配置,如果重新配置则覆盖继承的属性。$符号表示继承的是模板库中的控件,没有$则从当前文件中查找要继承的的控件。
GuiButtonCtrl "fire"
{
inherit = "$Button.Text"
textureNormal = "data/gui/MainMenu/exploide06.png"
textureOver = "data/gui/MainMenu/exploide06.png"
colorOver = 1.000000,1.000000,1.000000,1.000000
x = 200
y = 0
width = 600
height = 300
framesys = 2,2,
{
0,[0,0,0,][1,1,1,][0,0,0,][0,0.75,0.25,0.25,]1,
2,[0,0,0,][1,1,1,][0,0,0,][0.25,0.75,0.25,0.25,]1,
}
}end
4,列表控件、树形控件:
可以将任意控件组用作列表或树控件的元素,可以完全的自定义外观(只需要在ui源文件中配置元素模板即可)。
树形控件的使用一般比较繁琐,多使用嵌套递归添加节点。下面是tree控件的两个主要接口:
//@brief:插入节点(Group)或末端节点(Item),并返回该节点以便递归插入。
// 节点(Group)以m_groupTemplate为模板,末端节点(Item)以m_itemTemplate为模板。
// 这两个模板可以由程序设置,也可以缺省为资源文件的ctrl lib中配置。
// 因此每个节点可以是灵活的不同类型。
//@pos:插入的位置,为-1时插到尾部,
//@parentItem:插入到的父节点
GuiControl* InsertItem(int pos=-1,GuiGroupCtrl* parentItem = NULL);
GuiGroupCtrl* InsertGroup(int pos=-1,GuiGroupCtrl* parentItem = NULL);
使用示例如下
/*
ui编辑器中使用tree控件浏览选中的待编辑控件(target)的结构
*/
void GuiEditorDialog::BrowserCtrl(GuiControl* target,GuiTreeCtrl* tree,GuiGroupCtrl* parentItem /*= NULL*/)
{
GuiGroupCtrl* targetSubCtrlGroup;
GuiGroupCtrl* targetCtrlGroup = dynamic_cast<GuiGroupCtrl*>(target);
if (targetCtrlGroup==NULL)
{
return;
}
GuiControl* item;
GuiGroupCtrl* group_;
GuiButtonCtrl* itemText;
GuiButtonCtrl* groupText;
//自身
if (parentItem == NULL)
{
parentItem = m_browser->InsertGroup(-1,NULL);
parentItem->MAPCTRL(groupText,"GroupHeader.groupTxt");
if(groupText)
{
groupText->SetText(target->GetIdName().c_str());
}
}
//targetCtrlGroup->nu
for(CtrlVec::iterator it=targetCtrlGroup->m_ctrls.begin(); it!=targetCtrlGroup->m_ctrls.end();it++)
{
targetSubCtrlGroup = dynamic_cast<GuiGroupCtrl*>(*it);
if (targetSubCtrlGroup)
{
group_ = m_browser->InsertGroup(-1,parentItem);
group_->MAPCTRL(groupText,"GroupHeader.groupTxt");
if(groupText)
{
groupText->SetText(targetSubCtrlGroup->GetIdName().c_str());
}
//递归
BrowserCtrl(targetSubCtrlGroup,tree,group_);
}
else
{
item = m_browser->InsertItem(-1,parentItem);
((GuiGroupCtrl*)item)->MAPCTRL(itemText,"itemTxt");
if(itemText)
{
itemText->SetText((*it)->GetIdName().c_str());
}
}
}
}
5,提示工具tip,用于rpg游戏中各种icon悬浮提示:
只需继承TipRender,鼠标移动到icon等有提示内容的控件上时自动回调到virtul SetTip(GuiControl*fromCtrl)。在这个函数中根据被提示控件fromCtrl向GuiRichTextCtrl中写内容即可。GuiRichTextCtrl支持富文本显示、图片混排、自动换行等功能。同样也可以使用对话框界面来做提示功能。
父类TipRender会自动弹出提示框并调整到合理位置显示。
class SP_TipRender : public TipRender
{
public:
SP_TipRender();
virtual ~SP_TipRender();
static const int TOOLTIPWIDTH = 270;
public:
virtual void Render();
virtual void SetTip(GuiControl*fromCtrl);
virtual void SetTip(const char*txt);
virtual bool OnWake();
virtual void SetVisible(bool _visible);
private:
void SetUsingTip (void* fromDataInfo);
void SetPropTip (void* fromDataInfo);
void SetWeaponTip (void* fromDataInfo);
void SetSkillTip (void* fromDataInfo);
void SetUsingStyleTip (void* fromDataInfo);
void SetPropStyleTip (void* fromDataInfo);
void SetWeaponStyleTip (void* fromDataInfo);
void SetMapStyleTip (void* fromDataInfo);
void SetNpcStyleTip (void* fromDataInfo);
void SetMonsterStyleTip(void* fromDataInfo);
void SetPlantStyleTip (void* fromDataInfo);
void SetBugStyleTip (void* fromDataInfo);
public:
GuiRichTextCtrl* m_htmlTipRender;
int m_fontSizeTitle;
int m_fontSizeNormal;
int m_fontStyleTitle;
int m_fontStylePropertyName;
};
6,可拖动、可设置cd和提示气泡的icon:
GuiDragIconCtrl控件,可以设置cd速度。可以拖动整理图标。
7,动画
在ui资源文件中可以配置framesys来设置控件动画。可以为控件的普通、点击、高亮等状态设置不同的动画。
在c++代码中也可以通过Tween来更简洁的设置控件动画。
{
float duration = 0.5f;
GuiTweenClip* tweenClip = new GuiTweenClip(-1,NULL);
Sequence* sequence = new Sequence;
sequence
->AddTween(new TweenColor(tweenClip->m_color,Color(1,1,1,0),Color(1,1,1,0.0f),0.0f, TweenEase::Ease_Linear))
->Delay(0.3f)
->AddTween(new TweenColor(tweenClip->m_color,Color(1,1,1,0),Color(1,1,1,1.0f),0.5f, TweenEase::Ease_Linear))
->Delay(RandRange(0.0f,1.0f))//相位参差
->AddTween(new TweenColor(tweenClip->m_color,Color(1,1,1,1),Color(1,1,1,0.2f),duration, TweenEase::Ease_Linear))
->AddTween(new TweenColor(tweenClip->m_color,Color(1,1,1,0.2f),Color(1,1,1,1),duration, TweenEase::Ease_Linear))
->Delay(0.5f)
->Repeat(-3,-1);
tweenClip->AddSequence(sequence);
gameIcon->SetTweenClip(tweenClip);
}
GuiMovieCtrl可以在界面上播放3d场景动画。可以借助max制作动画场景,整体导出到该控件中播放。
8,界面贴到3D动画模型表面:
任意ui控件可以显示3d movie,比如滚条按钮可以3d动画显示。窗体可以贴到动画模型表面且可以响应输入。3D UI 可以应用骨骼动画、morph动画等。可以贴在诸如橱柜里、石碑上、跑动的卡车上,增加游戏的代入感。
调用GuiGroupTargetCtrl的如下两个接口绑定纹理:
RenderTarget* GetRenderTarget(){return m_renderTarget;}
void Bind();
该控件重载了如下两个函数,完成屏幕坐标的转换。
bool GuiGroupTargetCtrl::OnInputEvent(InputEvent& event_);
GuiControl* GuiGroupTargetCtrl::FindMouseCtrl(vec2 offset,vec2& pos);
在这两个函数中首先将屏幕坐标转换为鼠标点选射线,射线和贴到的宿主模型求交点,取出交点的纹理系坐标作为新的‘屏幕坐标’。
9,富文本编辑控件:
许多UI库对文本编辑控件(edit、richedit)的实现都是简化版的,文本编辑控件几乎是所有UI控件中最难实现的,它的功能是否完善可以作为检测一个ui库的参考指标。从qa的角度,文本编辑器应该具有的功能:英文、中文输入,插入符显示,框选显示等, 看似简单但细节很多,比如文本选择、超框滚动功能等。
文字显示特效: 粗体 斜体 描边 阴影 镂空 闪动 下滑线 删除线 背景色 背景边框
输入法相关,在windows系统中,使用系统ime。
在android系统中,使用自定义的T9输入法,软键盘。
自定义的rtf格式可以拷贝粘贴到剪贴板
10,流程图控件、时间轴控件:
11,简单的使用示例:
富文本编辑器,很简短的代码即可实现
class RTFEditorGui:public EditorDlgBase
{
public:
RTFEditorGui();
virtual bool OnWake();
virtual bool OnSleep();
virtual const char* GetTypeName();
static const char* DlgName();
virtual bool OpenFile(const char* fileName,bool listFile=false);
virtual bool SaveFile(const char* fileName);
private:
virtual void Update();
virtual void Render();
virtual bool ProcButtonUp (GuiButtonCtrl *ctrl);
virtual bool ProcButtonDown (GuiButtonCtrl *ctrl);
virtual bool ProcDragIconUp (GuiDragIconCtrl *ctrl);
virtual bool ProcEditUpdate (GuiControl *ctrl);
virtual bool ProcComboxUp (GuiComboxCtrl *combox,GuiControl* item,GuiControl* ctrl);
int OnColorPickOkCancel(const char* args,void* argp);
//void PropertyCtrl(GuiControl* ctrl,bool bSend);
private:
GuiRichEditCtrl* m_viewRichEdit;
GuiEditRectCtrl* m_sourceRichEdit;
GuiButtonCtrl * m_sourceLength;
};
#include "General/Pch.h"
#include "General/CallBack.h"
#include "Gui/GuiControlMisc.h"
#include "Gui/EditorGuis.h"
#include "Gui/GuiMgr.h"
#include "Render/RendDriver.h"
#include "General/StringUtil.h"
#include "General/Pce.h"
static int Size[] = {12,16,24,28,36,44,56,78};
RTFEditorGui::RTFEditorGui()
:m_viewRichEdit(NULL)
,m_sourceRichEdit(NULL)
{
char buf[] = "Gui Files (*.rtf)\0*.rtf\0All (*.*)\0*.*\0";
for (int i=0;i<sizeof(buf);i++)
{
m_fileFormat[i] = buf[i];
}
//m_fileDefaultDir = ".\\data\\gui";
}
bool RTFEditorGui::OnWake()
{
EditorDlgBase::OnWake();
MAPCTRL(m_viewRichEdit ,"*.scrollBar_editView.*.richedit");
MAPCTRL(m_sourceRichEdit ,"*.scrollBar_editSource.*.editRect");
MAPCTRL(m_sourceLength ,"*.bytesNum");
{
GuiComboxCtrl* itemCombox;
MAPCTRL(itemCombox ,"*.combox_fontsize");
GuiListCtrl* listCtrl = itemCombox->GetListCtrl();
if (listCtrl)
{
listCtrl->ClearItem();
for (int i=0;i<sizeof(Size)/4;i++)
{
GuiButtonCtrl* item = dynamic_cast<GuiButtonCtrl*>(listCtrl->InsertItem());
if (item)
item->SetText(StrFormat("%d",Size[i]));
}
}
itemCombox->SetCheckPos(0);
}
{
GuiComboxCtrl* itemCombox;
MAPCTRL(itemCombox ,"*.combox_fontface");
GuiListCtrl* listCtrl = itemCombox->GetListCtrl();
if (listCtrl)
{
listCtrl->ClearItem();
for (int i=0;i<4;i++)
{
GuiButtonCtrl* item = dynamic_cast<GuiButtonCtrl*>(listCtrl->InsertItem());
if (item)
{
item->SetText(FontFaceToString(i));
}
}
}
itemCombox->SetCheckPos(0);
}
OpenFile("data/test/rtfeditor.rtf");
//SubCtrlState("Menu.combox_view.*.menu_propertybox",GCS_CLICK);
//SubCtrlState("Menu.combox_view.*.menu_listbox",GCS_CLICK);
//SubCtrlState("Menu.combox_view.*.menu_treebox",GCS_CLICK);
//SubCtrlState("Menu.combox_view.*.menu_richeditbox",GCS_NORMAL);
//
return true;
}
bool RTFEditorGui::OnSleep()
{
return true;
}
void RTFEditorGui::Update()
{
EditorDlgBase::Update();
}
void RTFEditorGui::Render()
{
GuiGroupCtrl::Render();
}
const char* RTFEditorGui::GetTypeName()
{
return "GuiGroupCtrl";
}
const char* RTFEditorGui::DlgName()
{
return "RTFEditorGui";
}
bool RTFEditorGui::OpenFile(const char* fileName,bool listFile)
{
if (fileName==NULL || strlen(fileName)>=MAX_PATH)
{
return false;
}
//if(!m_canvans)
// return false;
std::string fileext = GetFileExtension(fileName);
if( fileext == "rtf")
{
m_fileName = fileName;
//属性
//PropertyCtrl(NULL,true);
File file;
file.Fopen(fileName,"rt");
m_viewRichEdit->AddLabelText(file.GetData());
m_sourceRichEdit->SetText(file.GetData());
}
return true;
}
bool RTFEditorGui::SaveFile(const char* fileName)
{
#ifdef WIN32APP
char szFile[MAX_PATH] = {0};
strcpy(szFile,fileName);
{
}
#endif
return true;
}
bool RTFEditorGui::ProcButtonUp(GuiButtonCtrl* ctrl)
{
if (!ctrl)
{
return true;
}
EditorDlgBase::ProcButtonDown(ctrl);
return true;
}
bool RTFEditorGui::ProcDragIconUp(GuiDragIconCtrl* ctrl)
{
if (!ctrl)
{
return true;
}
EditorDlgBase::ProcDragIconUp(ctrl);
String path = ctrl->GetPath();
String name = ctrl->GetIdName();
int select = 0;
if ( strncmp(name.c_str(),"icon",4)==0
&&name.length()>4
)
{
select = atoi(name.c_str()+4);
}
if(strstr(path.c_str(),"toolbaricon0"))
{
GuiRichTextCtrl::Words words;
m_viewRichEdit->GetSelCharFormat(words);
unsigned int effect = 0;
unsigned int backEffect = 0;
switch(select)
{
case 0: effect = FS_BOLD; break;
case 1: effect = FS_ITALIC; break;
case 2: effect = FS_UNDERLINE; break;
case 3: effect = FS_DELETELINE; break;
case 4: effect = FS_SHADOW; break;
case 5: effect = FS_OUTLINE; break;
case 6: effect = FS_HOLLOW; break;
case 7: effect = FS_LIGHT; break;
case 8: m_viewRichEdit->SetSelCharFlash(!words.flash);break;
case 9: backEffect = FB_RECT; break;
case 10: backEffect = FB_BORDERLINE; break;
case 11:
G_GuiMgr->PushGui("ColorPickerDialog",GL_DIALOG);
G_GuiMgr->GetGui("ColorPickerDialog")->CallBack()->Add("onOk",this,&RTFEditorGui::OnColorPickOkCancel,"font");
m_viewRichEdit->SetSelCharColor(Color(1,0,0,1));
break;
case 12:
G_GuiMgr->PushGui("ColorPickerDialog",GL_DIALOG);
G_GuiMgr->GetGui("ColorPickerDialog")->CallBack()->Add("onOk",this,&RTFEditorGui::OnColorPickOkCancel,"back");
break;
//case 13:
// m_viewRichEdit->SetSelCharSize(!words.flash);
// break;
case 19:
{
char buf[512];
char szFile[MAX_PATH] = {0};
char fileFormat[] = "pic Files (*.png)\0*.png\0All (*.*)\0*.*\0";
GetOpenFileName_(szFile,fileFormat,m_fileDefaultDir.c_str());
if( szFile[0])
{
sprintf(buf,"<W><bmp=%s><picSize=030,030>",szFile);
m_viewRichEdit->ReplaceSel(buf,vec2I(30,30));
}
}
break;
}
if (effect!=0)
{
if(words.style&effect)
m_viewRichEdit->RemoveSelCharEffect((FontStyle)effect);
else
m_viewRichEdit->AddSelCharEffect((FontStyle)effect);
}
if (backEffect!=0)
{
if(words.bStyle&backEffect)
m_viewRichEdit->RemoveSelBackEffect((FontBackStyle)backEffect);
else
m_viewRichEdit->AddSelBackEffect((FontBackStyle)backEffect);
}
}
else if (strstr(path.c_str(),"toolbaricon1"))
{
}
return true;
}
bool RTFEditorGui::ProcComboxUp(GuiComboxCtrl* combox,GuiControl* item,GuiControl* ctrl)
{
if (combox)
{
if (combox->GetIdName()=="combox_fontsize")
{
int sel = combox->GetCheckPos();
m_viewRichEdit->SetSelCharSize(Size[sel]);
}
if (combox->GetIdName()=="combox_fontface")
{
int sel = combox->GetCheckPos();
m_viewRichEdit->SetSelCharFace(sel);
}
}
return true;
}
bool RTFEditorGui::ProcEditUpdate(GuiControl* ctrl)
{
//GuiEditCtrl GuiEditRectCtrl GuiRichEditCtrl
if (!ctrl)
{
return true;
}
String name = ctrl->GetIdName();
if (name == "edit_view")
{
m_sourceRichEdit->SetText(m_viewRichEdit->GetLabelText().c_str());
int _min,_max;
m_viewRichEdit->GetSel(_min,_max);
m_sourceRichEdit->SetSel(_min,_max);
m_sourceRichEdit->SetIMECaret(m_viewRichEdit->GetIMECaret());
m_sourceLength->SetText(StrFormat("%d/%d %d/%d",m_sourceRichEdit->GetLineNum(),m_sourceRichEdit->GetLimitLineNum(),(int)m_sourceRichEdit->GetText().length(),m_sourceRichEdit->GetLimitWordNum()));
}
else if (name == "edit_source")
{
//m_viewRichEdit->Clear();
//m_viewRichEdit->AddLabelText(m_sourceRichEdit->GetText());
//int _min,_max;
//m_sourceRichEdit->GetSel(_min,_max);
//m_viewRichEdit->SetSel(_min,_max);
//m_viewRichEdit->SetIMECaret(m_sourceRichEdit->GetIMECaret());
}
return true;
}
int RTFEditorGui::OnColorPickOkCancel(const char* args,void* argp)
{
if (args && strcmp(args,"back")==0)
{
m_viewRichEdit->SetSelCharBackColor(G_GuiMgr->GetGui<ColorPickerDialog>()->GetPickedColor());
}
else if (args && strcmp(args,"font")==0)
{
m_viewRichEdit->SetSelCharColor(G_GuiMgr->GetGui<ColorPickerDialog>()->GetPickedColor());
}
return 0;
}
bool RTFEditorGui::ProcButtonDown(GuiButtonCtrl* ctrl)
{
if (!ctrl)
{
return true;
}
EditorDlgBase::ProcButtonDown(ctrl);
//String path = ctrl->GetPath();
String name = ctrl->GetIdName();
if (name == "menu_new")
{
}
else if (name == "menu_undo")
{
}
else if (name == "menu_richeditbox")
{
bool visible = ctrl->GetState() == GCS_CLICK;
SubCtrlVisible("sourceeditor",visible);
//SubCtrlVisible("sourceeditor.codeEditCtrl",visible);
}
else if (name == ">>")
{
m_sourceRichEdit->SetText(m_viewRichEdit->GetLabelText().c_str());
int _min,_max;
m_viewRichEdit->GetSel(_min,_max);
m_sourceRichEdit->SetSel(_min,_max);
m_sourceRichEdit->SetIMECaret(_max/*m_viewRichEdit->GetIMECaret()*/);
}
else if (name == "<<")
{
m_viewRichEdit->Clear();
m_viewRichEdit->AddLabelText(m_sourceRichEdit->GetText().c_str());
int _min,_max;
m_sourceRichEdit->GetSel(_min,_max);
m_viewRichEdit->SetSel(_min,_max);
m_viewRichEdit->SetIMECaret(m_sourceRichEdit->GetIMECaret());
}
return true;
}
附录:
ui资源文件格式示例:
//========================================================
/**
* @file PlayGui.gui
* Brief: PlayGui
* Author: LouLei
* Email: twopointfive@163.com
*/
//========================================================
"PlayGui"
{
x = 0
y = 0
width = 1
height = 1
wakeSoundLoop = "1"
extendTypeH = PERSENT
extendTypeW = PERSENT
GuiButtonCtrl "deadMask"
{
inherit = "$Button.Default"
textureNormal = "data/gui/PlayGui/deadmask.png"
textureClick = "data/gui/PlayGui/deadmask.png"
textureOver = "data/gui/PlayGui/deadmask.png"
textureDisable = "data/gui/PlayGui/deadmask.png"
x = 0
y = 0
width = 1
height = 1
canhit = 0
visible = 0
beclip = 0
expandTex = 0
extendTypeH = PERSENT
extendTypeW = PERSENT
frameline = "",loop1,tex1,3,
{
0, [0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
20,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 0.50
40,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
}
}end
GuiButtonCtrl "hurtMask"
{
inherit = "$Button.Default"
textureNormal = "data/gui/PlayGui/hurtMask.png"
textureClick = "data/gui/PlayGui/hurtMask.png"
textureOver = "data/gui/PlayGui/hurtMask.png"
textureDisable = "data/gui/PlayGui/hurtMask.png"
x = 0
y = 0
width = 1
height = 1
canhit = 0
visible = 0
beclip = 0
expandTex = 0
extendTypeH = PERSENT
extendTypeW = PERSENT
frameline = "",loop1,tex1,3,
{
0, [0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
10,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 0.70
20,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
}
}end
GuiMovieCtrl "chuanglian_icon"
{
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = -200
y = 0
width = 500
height = 200
canhit = 0
beclip = 0
alignTypeW = CENTER
movieName = "data/gui/PlayGui/iconMovie.movie"
movieWidth = 800
movieHeight = 600
}end
GuiRadioCtrl "rpgSkillIcons"
{
x = -250
y = 5
width = 500
height = 200
alignTypeW = CENTER
GuiDragIconCtrl "icon0"
{
textureNormal = "data/gui/playGui/skillframe_n.png"
textureClick = "data/gui/playGui/skillframe_h.png"
textureOver = "data/gui/playGui/skillframe_h.png"
x = 0
y = 0
width = 38
height = 38
bCheck = 1
state = 1
}end
GuiDragIconCtrl "icon1"
{
inherit = "icon0"
x = 40
}end
GuiDragIconCtrl "icon2"
{
inherit = "icon0"
x = 80
}end
GuiDragIconCtrl "icon3"
{
inherit = "icon0"
x = 120
}end
GuiDragIconCtrl "icon4"
{
inherit = "icon0"
x = 160
}end
GuiDragIconCtrl "icon5"
{
inherit = "icon0"
x = 200
}end
GuiDragIconCtrl "icon6"
{
inherit = "icon0"
x = 240
}end
GuiDragIconCtrl "icon7"
{
inherit = "icon0"
x = 280
}end
GuiDragIconCtrl "icon8"
{
inherit = "icon0"
x = 320
}end
GuiDragIconCtrl "icon9"
{
inherit = "icon0"
x = 360
}end
GuiDragIconCtrl "icon10"
{
inherit = "icon0"
x = 400
}end
GuiDragIconCtrl "icon11"
{
inherit = "icon0"
x = 440
}end
}end
GuiGroupCtrl "pickedCharacter"
{
x = 5
y = 65
width = 100
height = 200
GuiButtonCtrl "movieback"
{
textureNormal = "data/gui/playGui/SkillBack_n.png"
textureClick = "data/gui/playGui/SkillBack_n.png"
textureOver = "data/gui/playGui/SkillBack_n.png"
x = 0
y = 0
width = 100
height = 150
visible = 0
}end
GuiMovieCtrl "moviePick"
{
colorNormal = 1, 1, 1, 1
colorClick = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 0
y = 0
width = 100
height = 125
movieWidth = 800
movieHeight = 600
}end
GuiRichTextCtrl "richtext"
{
textureNormal = "data/gui/common/null.png"
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 5
y = 100
width = 190
height = 90
limitLineNum = "6"
}end
GuiProgressBarCtrl "characterHelthBar"
{
textureNormal = "data/gui/playGui/RoleBar.png"
textureClick = "data/gui/playGui/RoleBar.png"
textureOver = "data/gui/playGui/RoleBar.png"
x = 5
y = 135
width = 83
height = 10
text = "health"
textureBar = "data/gui/playGui/RoleBar_red.png"
textureBarBack = "data/gui/playGui/RoleBar_black.png"
}end
GuiButtonCtrl "characterMask"
{
textureNormal = "data/gui/playGui/characterMask.png"
textureClick = "data/gui/playGui/characterMask.png"
textureOver = "data/gui/playGui/characterMask.png"
x = 0
y = 0
width = 100
height = 150
}end
}end
GuiGroupCtrl "resourcebar"
{
textureNormal = "data/gui/playGui/resourceBar.png"
textureClick = "data/gui/playGui/resourceBar.png"
textureOver = "data/gui/playGui/resourceBar.png"
colorNormal = 1, 1, 1, 1
colorClick = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 255
y = 0
width = 255
height = 71
alignTypeW = RIGHT
GuiButtonCtrl "TimeIndicator"
{
textureNormal = "data/gui/playGui/TimeIndicator.png"
textureClick = "data/gui/playGui/TimeIndicator.png"
textureOver = "data/gui/playGui/TimeIndicator.png"
x = 0
y = 0
width = 35
height = 35
frameline = "",loop1,tex1,2,
{
0, [180.00,30.00] [1.00,1.00] 0.00 [0.00,0.00,0.50,1.00] 1.00
200,[180.00,30.00] [1.00,1.00] 0.00 [1.00,0.00,0.50,1.00] 1.00
}
}end
GuiButtonCtrl "background"
{
textureNormal = "data/gui/playGui/resourceBar.png"
textureClick = "data/gui/playGui/resourceBar.png"
textureOver = "data/gui/playGui/resourceBar.png"
x = 0
y = 0
width = 255
height = 71
}end
GuiButtonCtrl "text0"
{
inherit = "$Button.Text"
x = 26
y = 3
width = 86
height = 15
tip = "金币,通过打怪获得。"
text = "0"
}end
GuiButtonCtrl "text1"
{
inherit = "$Button.Text"
x = 112
y = 3
width = 86
height = 15
tip = "人头,通过打怪获得。"
text = "0"
}end
GuiButtonCtrl "text2"
{
inherit = "$Button.Text"
x = 198
y = 3
width = 86
height = 15
tip = "晶石,通过采矿获得。"
text = "0"
}end
}end
GuiGroupCtrl "rolebar"
{
x = 5
y = 5
width = 200
height = 200
GuiProgressBarCtrl "characterHelthBar"
{
textureNormal = "data/gui/playGui/RoleBar.png"
textureClick = "data/gui/playGui/RoleBar.png"
textureOver = "data/gui/playGui/RoleBar.png"
x = 0
y = 0
width = 151
height = 16
text = "health"
textureBar = "data/gui/playGui/RoleBar_red.png"
textureBarBack = "data/gui/playGui/RoleBar_black.png"
}end
GuiProgressBarCtrl "characterMagicBar"
{
textureNormal = "data/gui/playGui/RoleBar.png"
textureClick = "data/gui/playGui/RoleBar.png"
textureOver = "data/gui/playGui/RoleBar.png"
x = 0
y = 20
width = 151
height = 16
text = "magic"
textureBar = "data/gui/playGui/RoleBar_blue.png"
}end
GuiProgressBarCtrl "characterExpBar"
{
textureNormal = "data/gui/playGui/RoleBar.png"
textureClick = "data/gui/playGui/RoleBar.png"
textureOver = "data/gui/playGui/RoleBar.png"
x = 0
y = 40
width = 151
height = 16
text = "experience"
textureBar = "data/gui/playGui/RoleBar_exp.png"
}end
}end
GuiGroupCtrl "dialogmenu"
{
x = 5
y = 250
width = 156
height = 450
GuiButtonCtrl "button_character"
{
textureNormal = "data/gui/playGui/RoleButton_n.png"
textureClick = "data/gui/playGui/RoleButton_d.png"
textureOver = "data/gui/playGui/RoleButton_h.png"
x = 0
y = 0
width = 44
height = 51
tip = "角色"
}end
GuiButtonCtrl "button_taskbag"
{
textureNormal = "data/gui/playGui/QuestButton_n.png"
textureClick = "data/gui/playGui/QuestButton_d.png"
textureOver = "data/gui/playGui/QuestButton_h.png"
x = 0
y = 50
width = 44
height = 49
tip = "任务"
}end
GuiButtonCtrl "button_itembag"
{
textureNormal = "data/gui/playGui/ItemBagButton_n.png"
textureClick = "data/gui/playGui/ItemBagButton_d.png"
textureOver = "data/gui/playGui/ItemBagButton_h.png"
x = 0
y = 100
width = 44
height = 49
tip = "物品"
}end
GuiButtonCtrl "button_skillbag"
{
textureNormal = "data/gui/playGui/SkillBagButton_n.png"
textureClick = "data/gui/playGui/SkillBagButton_d.png"
textureOver = "data/gui/playGui/SkillBagButton_h.png"
x = 0
y = 150
width = 44
height = 49
tip = "技能"
}end
GuiButtonCtrl "button_config"
{
textureNormal = "data/gui/playGui/ConfigButton_n.png"
textureClick = "data/gui/playGui/ConfigButton_d.png"
textureOver = "data/gui/playGui/ConfigButton_h.png"
x = 0
y = 200
width = 44
height = 49
tip = "设置"
}end
GuiButtonCtrl "button_backMain"
{
textureNormal = "data/gui/playGui/exitButton_n.png"
textureClick = "data/gui/playGui/exitButton_d.png"
textureOver = "data/gui/playGui/exitButton_h.png"
x = 0
y = 250
width = 31
height = 32
text = "退出"
}end
GuiButtonCtrl "button_exitMiniGame"
{
textureNormal = "data/gui/PlayGui/miniStop.png"
textureClick = "data/gui/PlayGui/miniStop.png"
textureOver = "data/gui/PlayGui/miniStop.png"
colorClick = 1, 0, 0, 1
colorOver = 0, 1, 0, 1
x = 0
y = 300
width = 97
height = 30
tip = "退出当前小游戏"
clickSound = "data/sound/ui_button.wav"
}end
GuiButtonCtrl "button_singlegame"
{
textureNormal = "data/gui/playGui/singlegamebutton_n.png"
textureClick = "data/gui/playGui/singlegamebutton_d.png"
textureOver = "data/gui/playGui/singlegamebutton_h.png"
x = 50
y = 100
width = 44
height = 49
tip = "mini大厅"
}end
GuiButtonCtrl "button_lobby"
{
textureNormal = "data/gui/playGui/matchbutton_n.png"
textureClick = "data/gui/playGui/matchbutton_d.png"
textureOver = "data/gui/playGui/matchbutton_h.png"
x = 50
y = 150
width = 44
height = 49
tip = "mini大厅"
}end
GuiButtonCtrl "button_shop"
{
textureNormal = "data/gui/playGui/shop_n.png"
textureClick = "data/gui/playGui/shop_d.png"
textureOver = "data/gui/playGui/shop_h.png"
x = 50
y = 200
width = 44
height = 49
tip = "商城"
}end
GuiMovieCtrl "menuMovie"
{
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 0
y = 0
width = 156
height = 450
canhit = 0
beclip = 0
movieName = "data/gui/PlayGui/menuMovie.movie"
movieWidth = 800
movieHeight = 600
}end
}end
GuiGroupCtrl "npcBubble"
{
textureNormal = "data/gui/MissionDlg/npcBubble.png"
textureClick = "data/gui/MissionDlg/npcBubble.png"
textureOver = "data/gui/MissionDlg/npcBubble.png"
colorNormal = 1, 1, 1, 1
colorClick = 0, 1, 0, 1
colorOver = 1, 1, 0, 1
x = 0
y = 0
width = 300
height = 100
visible = 0
frameline = "",loop1,tex1,7,
{
0, [0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
10,[0.00,-10.00] [1.10,1.10] 0.00 [0.00,0.00,1.00,1.00] 0.50
20,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
30,[0.00,-10.00] [1.10,1.10] 0.00 [0.00,0.00,1.00,1.00] 0.50
40,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
50,[0.00,-20.00] [1.20,1.20] 0.00 [0.00,0.00,1.00,1.00] 0.50
60,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
}
GuiRichTextCtrl "htmlNpcBubble"
{
textureNormal = "data/gui/common/null.png"
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 15
y = 25
width = 250
height = 100
limitLineNum = "3"
}end
}end
GuiGroupCtrl "playNotice"
{
textureNormal = "data/gui/MissionDlg/npcBubble.png"
textureClick = "data/gui/MissionDlg/npcBubble.png"
textureOver = "data/gui/MissionDlg/npcBubble.png"
colorNormal = 1, 1, 1, 1
colorClick = 0, 1, 0, 1
colorOver = 1, 1, 0, 1
x = 300
y = 280
width = 300
height = 150
visible = 0
alignTypeW = RIGHT
alignTypeH = BOTTOM
GuiRichTextCtrl "htmlPlayNotice"
{
textureNormal = "data/gui/common/null.png"
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 15
y = 25
width = 250
height = 150
limitLineNum = "4"
}end
}end
GuiButtonCtrl "minigameEnter"
{
inherit = "$Button.Default"
textureNormal = "data/gui/PlayGui/minigameEnter.png"
textureClick = "data/gui/PlayGui/minigameEnter.png"
textureOver = "data/gui/PlayGui/minigameEnter.png"
textureDisable = "data/gui/PlayGui/minigameEnter.png"
x = 0
y = 0
width = 1
height = 1
beclip = 0
expandTex = 0
opacityType = Add
frameline = "",loop1,tex1,3,
{
0, [0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
10,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 0.70
20,[0.00,0.00] [1.00,1.00] 0.00 [0.00,0.00,1.00,1.00] 1.00
}
}end
GuiGroupCtrl "getItems"
{
x = 300
y = 150
width = 300
height = 150
GuiMovieCtrl "getItemsMovie"
{
colorNormal = 1, 1, 1, 1
colorOver = 1, 1, 1, 1
colorDisable = 1, 1, 1, 1
x = 0
y = 0
width = 156
height = 450
canhit = 0
visible = 0
beclip = 0
movieName = "data/gui/BaoxiangUI/baoxiang.movie"
movieWidth = 800
movieHeight = 600
}end
}end
}end