/* 文件名:UI_Widget.nut 路径:Core/UI_Class/UI_Widget.nut 创建日期:2024-11-08 14:24 文件用途: 控件基类 */ //基础UI class Yosin_CommonUi extends Yosin_BaseWindow { ObjectId = null; Localtion_X = 0; Localtion_Y = 0; Width = null; Height = null; isLBDown = false; //是否悬停 isInRect = false; OnClick = null; OnClickSound = null; Data = null; constructor(x, y, width, height) { this.Localtion_X = x; this.Localtion_Y = y; this.Width = width; this.Height = height; ObjectId = clock(); base.constructor(); //构造时第一次同步坐标 SyncPos(x, y); } //override //鼠标事件回调 function OnMouseProc(MousePos_X, MousePos_Y) { local Pos = GetWorldPosition(); if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) isInRect = true; else isInRect = false; } //鼠标左键按下回调 function OnMouseLbDown(MousePos_X, MousePos_Y) { local Pos = GetWorldPosition(); if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) { isLBDown = true; //如果有配置按键音效 if (OnClickSound) { Sq_PlaySoundEffect(OnClickSound); } } } //鼠标左键弹起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { isLBDown = false; } //鼠标左键单击回调 function OnMouseLbClick(MousePos_X, MousePos_Y) { local Pos = GetWorldPosition(); if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) { if (OnClick) OnClick(this); } } } //基础按钮 class Yosin_BaseButton extends Yosin_CommonUi { //按钮状态 State = 0; DWidth = null; Path = null; Idx = null; Sprite = null; SpriteState = -1; FrameList = null; constructor(X, Y, W, H, Path, Idx) { this.DWidth = W; this.Path = Path; this.Idx = Idx; base.constructor(X, Y, W, H); FrameList = []; Sprite = CL_SpriteObject(); // Sprite.ShowBorder(true); Addchild(Sprite); for (local i = 0; i< 4; i++) { local Sf = CL_SpriteFrameObject(this.Path, this.Idx + i); FrameList.push(Sf); } } function ChangeFrame() { //状态更改 刷新精灵帧 if (State != SpriteState) { //如果按下 调整Y坐标向下一个单位 if (State == 2) { Y += 1; SyncPos(X, Y); } else if (SpriteState == 2) { Y -= 1; SyncPos(X, Y); } SpriteState = State; Sprite.SetFrame(FrameList[SpriteState]); Sprite.SetPosition(0, 0); } } function Proc(Dt) { //不可用 if (State == 3) { } else { //按下 if (isLBDown) { State = 2; } //悬停 else if (isInRect) { State = 1; } //普通 else { State = 0; } } ChangeFrame(); } }