167 lines
6.0 KiB
TypeScript
167 lines
6.0 KiB
TypeScript
import { _decorator, CCInteger, CCString, Component, Node, Sprite, SpriteFrame, input, Input, __private, NodeEventType, EventTouch, EventMouse, UITransform, v2 } from 'cc';
|
|
import { BaseSpriteFrame } from './BaseSpriteFrame';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
export enum BaseButtonState{
|
|
// 普通
|
|
Normal = 0,
|
|
// 悬停
|
|
Hover = 1,
|
|
// 按下
|
|
Press = 2,
|
|
//失效
|
|
Disable = 8
|
|
}
|
|
|
|
@ccclass('BaseButton')
|
|
export class BaseButton extends Component {
|
|
|
|
@property({ type: CCString, displayName: 'img路径', tooltip: "img路径" })
|
|
ImgPath: string;
|
|
|
|
@property({ type: [CCInteger], displayName: '普通img编号', tooltip: "普通img编号" })
|
|
NormalImgIndex: number;
|
|
|
|
@property({ type: [CCInteger], displayName: '悬停img编号', tooltip: "悬停img编号" })
|
|
HoverImgIndex: number;
|
|
|
|
@property({ type: [CCInteger], displayName: '按下img编号', tooltip: "按下img编号" })
|
|
PressImgIndex: number;
|
|
|
|
@property({ type: [CCInteger], displayName: '失效img编号', tooltip: "失效img编号" })
|
|
DisableImgIndex: number;
|
|
|
|
//普通精灵帧
|
|
NormalImgSpriteFrame: SpriteFrame;
|
|
|
|
//悬停精灵帧
|
|
HoverImgSpriteFrame: SpriteFrame;
|
|
|
|
//按下精灵帧
|
|
PressImgSpriteFrame: SpriteFrame;
|
|
|
|
//失效精灵帧
|
|
DisableImgSpriteFrame: SpriteFrame;
|
|
|
|
//精灵对象
|
|
SpriteObj: Sprite;
|
|
|
|
//初始化状态
|
|
InitState = false;
|
|
|
|
//按钮状态
|
|
ButtonState = BaseButtonState.Normal; // 0 普通 1悬停 2按下 8失效
|
|
|
|
/**
|
|
* @description: BaseButton初始化设置
|
|
* @param {string} ImgPath: npk中的路径
|
|
* @param {number} NormalIndex: 普通 在npk.img 中的idnex 其他状态自动+1
|
|
*/
|
|
init(ImgPath:string,NormalIndex:number): void;
|
|
init(ImgPath:string,NormalIndex:number,HoverIndex:number,PressIndex:number,DisableIndex:number,auto:boolean): void;
|
|
|
|
/**
|
|
* @description: BaseButton初始化设置
|
|
* @param {string} ImgPath: npk中的路径
|
|
* @param {number} NormalIndex: 普通 在npk.img 中的idnex
|
|
* @param {number} HoverIndex: 悬停
|
|
* @param {number} PressIndex 按下
|
|
* @param {number} DisableIndex 失效
|
|
* @param {number} Disable 是否启用失效状态
|
|
* @return {*}
|
|
*/
|
|
init(ImgPath:string,NormalIndex:number,HoverIndex?:number,PressIndex?:number,DisableIndex?:number,Disable:boolean = true): void{
|
|
this.ImgPath = ImgPath;
|
|
this.NormalImgIndex = NormalIndex;
|
|
this.HoverImgIndex = HoverIndex ? HoverIndex : NormalIndex + 1;
|
|
this.PressImgIndex = PressIndex ? PressIndex : NormalIndex + 2;
|
|
if (Disable){ this.DisableImgIndex = DisableIndex ? DisableIndex : NormalIndex + 3; }
|
|
}
|
|
|
|
start() {
|
|
|
|
//判断是否有精灵 如果没有 就给他搞一个
|
|
if (this.node.getComponent(Sprite))
|
|
this.SpriteObj = this.node.getComponent(Sprite);
|
|
else
|
|
this.SpriteObj = this.node.addComponent(Sprite);
|
|
|
|
//设置节点锚点为左上角
|
|
this.node.getComponent(UITransform).anchorPoint = v2(0, 1);
|
|
//设置类型
|
|
this.SpriteObj.sizeMode = Sprite.SizeMode.RAW;
|
|
//设置
|
|
this.SpriteObj.trim = false;
|
|
|
|
new BaseSpriteFrame(this.ImgPath, this.NormalImgIndex, _SpriteFrame => { this.NormalImgSpriteFrame = _SpriteFrame });
|
|
new BaseSpriteFrame(this.ImgPath, this.HoverImgIndex, _SpriteFrame => { this.HoverImgSpriteFrame = _SpriteFrame });
|
|
new BaseSpriteFrame(this.ImgPath, this.PressImgIndex, _SpriteFrame => { this.PressImgSpriteFrame = _SpriteFrame });
|
|
new BaseSpriteFrame(this.ImgPath, this.DisableImgIndex, _SpriteFrame => { this.DisableImgSpriteFrame = _SpriteFrame });
|
|
|
|
}
|
|
|
|
UploadSpriteFrame(_SpriteFrame) {
|
|
if (this.SpriteObj.spriteFrame != _SpriteFrame) {
|
|
this.SpriteObj.spriteFrame = _SpriteFrame;
|
|
}
|
|
}
|
|
|
|
update(deltaTime: number) {
|
|
if (!this.InitState) {
|
|
if (this.NormalImgSpriteFrame && this.HoverImgSpriteFrame && this.PressImgSpriteFrame) {
|
|
this.InitState = true;
|
|
this.UploadSpriteFrame(this.NormalImgSpriteFrame);
|
|
|
|
// this.node.on(Input.EventType.TOUCH_START, this.OnPress, this);
|
|
// this.node.on(Input.EventType.TOUCH_END, this.OnEnd, this);
|
|
this.node.on(Node.EventType.MOUSE_ENTER, this.OnHever, this);
|
|
this.node.on(Node.EventType.MOUSE_LEAVE, this.OffHever, this);
|
|
this.node.on(Node.EventType.MOUSE_DOWN, this.OnPress, this);
|
|
this.node.on(Node.EventType.MOUSE_UP, this.OnEnd, this);
|
|
}
|
|
} else {
|
|
switch (this.ButtonState) {
|
|
case BaseButtonState.Normal:
|
|
this.UploadSpriteFrame(this.NormalImgSpriteFrame);
|
|
break;
|
|
case BaseButtonState.Hover:
|
|
this.UploadSpriteFrame(this.HoverImgSpriteFrame);
|
|
break;
|
|
case BaseButtonState.Press:
|
|
this.UploadSpriteFrame(this.PressImgSpriteFrame);
|
|
break;
|
|
case BaseButtonState.Disable:
|
|
this.UploadSpriteFrame(this.DisableImgSpriteFrame);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
OffHever(event) {
|
|
if (this.ButtonState == BaseButtonState.Disable) return;
|
|
this.ButtonState = BaseButtonState.Normal;
|
|
}
|
|
OnHever(event) {
|
|
if (this.ButtonState == BaseButtonState.Disable) return;
|
|
this.ButtonState = BaseButtonState.Hover;
|
|
}
|
|
OnEnd(event: EventMouse) {
|
|
if (this.ButtonState == BaseButtonState.Disable) return;
|
|
if (event.getButton() != EventMouse.BUTTON_LEFT) return;
|
|
this.ButtonState = BaseButtonState.Normal;
|
|
}
|
|
|
|
OnPress(event: EventMouse) {
|
|
if (this.ButtonState == BaseButtonState.Disable) return;
|
|
//必须是鼠标左键
|
|
if (event.getButton() != EventMouse.BUTTON_LEFT) return;
|
|
|
|
this.ButtonState = BaseButtonState.Press;
|
|
}
|
|
}
|
|
|
|
|