210 lines
4.8 KiB
TypeScript
210 lines
4.8 KiB
TypeScript
/*
|
|
* @Author: WoNiu
|
|
* @Date: 2024-03-22 19:50:30
|
|
* @LastEditTime: 2024-03-24 17:09:16
|
|
* @LastEditors: WoNiu
|
|
* @Description: 选择卡片节点
|
|
*/
|
|
|
|
import {
|
|
_decorator,
|
|
EventMouse,
|
|
Node,
|
|
Sprite,
|
|
SpriteFrame,
|
|
UITransform,
|
|
v2,
|
|
tween,
|
|
Component,
|
|
Label,
|
|
Color,
|
|
Size,
|
|
v3,
|
|
} from "cc";
|
|
import { NpkImage } from "../../Tool/NPKImage";
|
|
import { BaseSpriteFrame } from "../../GlobalScript/CommonComponent/BaseSpriteFrame";
|
|
const { ccclass, property } = _decorator;
|
|
|
|
@ccclass("CardNode")
|
|
export class CardNode extends Node {
|
|
//普通精灵帧
|
|
private NormalSpriteFrame: SpriteFrame;
|
|
|
|
// 高亮精灵帧1
|
|
private oneSpriteFrame: SpriteFrame;
|
|
|
|
//高亮精灵帧2
|
|
private twoSpriteFrame: SpriteFrame;
|
|
|
|
// 翻转动画
|
|
flipsAnimation:CardFlipsAnimation;
|
|
|
|
//精灵对象
|
|
private SpriteObj: Sprite;
|
|
|
|
// 是否按钮失效
|
|
Disable = false;
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
const trf = this.addComponent(UITransform);
|
|
trf.anchorPoint = v2(0.5, 1)
|
|
trf.contentSize = new Size(178,113);
|
|
|
|
this.flipsAnimation = this.addComponent(CardFlipsAnimation);
|
|
|
|
this.initBackgroundNode();
|
|
this.initSpriteFrame();
|
|
this.initEvent();
|
|
}
|
|
|
|
initBackgroundNode(){
|
|
// const node = new Node();
|
|
// this.addChild(node);
|
|
|
|
// const trf = node.addComponent(UITransform);
|
|
// trf.contentSize = new Size(178,113);
|
|
// trf.anchorPoint = v2(0,1);
|
|
|
|
// this.SpriteObj = node.addComponent(Sprite);
|
|
this.SpriteObj = this.addComponent(Sprite);
|
|
}
|
|
|
|
|
|
initSpriteFrame() {
|
|
/// 不同亮度的卡片
|
|
new BaseSpriteFrame(NpkImage.ingame, 47, (SpriteFrame: SpriteFrame) => {
|
|
this.NormalSpriteFrame = SpriteFrame;
|
|
this.SpriteObj.spriteFrame = SpriteFrame;
|
|
});
|
|
new BaseSpriteFrame(NpkImage.ingame, 48, (SpriteFrame: SpriteFrame) => {
|
|
this.oneSpriteFrame = SpriteFrame;
|
|
});
|
|
new BaseSpriteFrame(NpkImage.ingame, 49, (SpriteFrame: SpriteFrame) => {
|
|
this.twoSpriteFrame = SpriteFrame;
|
|
});
|
|
}
|
|
|
|
initEvent() {
|
|
this.on(Node.EventType.MOUSE_ENTER, this.OnHever, this);
|
|
this.on(Node.EventType.MOUSE_LEAVE, this.OffHever, this);
|
|
this.on(Node.EventType.MOUSE_DOWN, this.OnDown, this);
|
|
}
|
|
|
|
OffHever() {
|
|
if (this.Disable) return;
|
|
this.SpriteObj.spriteFrame = this.NormalSpriteFrame;
|
|
}
|
|
OnHever() {
|
|
if (this.Disable) return;
|
|
this.SpriteObj.spriteFrame = this.oneSpriteFrame;
|
|
}
|
|
|
|
OnDown(event: EventMouse) {
|
|
//必须是鼠标左键
|
|
if (event.getButton() != EventMouse.BUTTON_LEFT || this.Disable) return;
|
|
this.SpriteObj.spriteFrame = this.twoSpriteFrame;
|
|
this.Disable = true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @description: 卡片的翻转动画
|
|
*/
|
|
export class CardFlipsAnimation extends Component {
|
|
// 数字1精灵帧
|
|
oneSpriteFrame: SpriteFrame;
|
|
|
|
//数字2精灵帧
|
|
twoSpriteFrame: SpriteFrame;
|
|
|
|
//数字2精灵帧
|
|
threeSpriteFrame: SpriteFrame;
|
|
|
|
// 数字
|
|
value: number;
|
|
|
|
// 单次缓动时间
|
|
tweenTime: number = 0.5;
|
|
|
|
// 玩家名称
|
|
nameNode: Node;
|
|
|
|
scale = {x:1};
|
|
|
|
onLoad() {
|
|
/// 数字卡片
|
|
new BaseSpriteFrame(NpkImage.ingame, 50, (SpriteFrame: SpriteFrame) => {
|
|
this.oneSpriteFrame = SpriteFrame;
|
|
});
|
|
new BaseSpriteFrame(NpkImage.ingame, 51, (SpriteFrame: SpriteFrame) => {
|
|
this.twoSpriteFrame = SpriteFrame;
|
|
});
|
|
new BaseSpriteFrame(NpkImage.ingame, 52, (SpriteFrame: SpriteFrame) => {
|
|
this.threeSpriteFrame = SpriteFrame;
|
|
});
|
|
|
|
|
|
// this.nameLabel = this.node.addComponent(Label);
|
|
|
|
}
|
|
|
|
start() {}
|
|
|
|
|
|
/**
|
|
* @description: 翻转动画
|
|
* @param {1} value: 这个卡牌反转后是几
|
|
*/
|
|
animationStart(value: number,name:string) {
|
|
this.value = value;
|
|
if (value > 2) this.value = 2;
|
|
|
|
this.initNmaeNode(name);
|
|
|
|
tween(this.scale).to(this.tweenTime, { x: 0,},{onComplete:()=>{
|
|
this.flipsTweenBack();
|
|
},onUpdate:()=>{
|
|
this.node.scale = v3(this.scale.x,1,1);
|
|
},easing:'linear'}).start();
|
|
}
|
|
|
|
flipsTweenBack(){
|
|
const spriteFrames = [this.oneSpriteFrame,this.twoSpriteFrame,this.threeSpriteFrame];
|
|
this.node.getComponent(Sprite).spriteFrame = spriteFrames[this.value];
|
|
this.nameNode.active = true;
|
|
|
|
tween(this.scale).to(this.tweenTime, { x: 1,},{onUpdate:()=>{
|
|
this.node.scale = v3(this.scale.x,1,1);
|
|
},easing:'linear'}).start();
|
|
}
|
|
|
|
|
|
initNmaeNode(name:string){
|
|
const nameNode = new Node('label');
|
|
this.node.addChild(nameNode);
|
|
this.nameNode = nameNode;
|
|
|
|
nameNode.active = false;
|
|
nameNode.setPosition(0,-75);
|
|
|
|
const trf = nameNode.addComponent(UITransform);
|
|
trf.anchorPoint = v2(0.5,1);
|
|
trf.contentSize = new Size(178,20);
|
|
|
|
const label = nameNode.addComponent(Label);
|
|
label.overflow = Label.Overflow.CLAMP;
|
|
label.string = name;
|
|
label.fontSize = 15;
|
|
label.color = Color.RED;
|
|
label.horizontalAlign = Label.HorizontalAlign.CENTER;
|
|
label.verticalAlign = Label.VerticalAlign.CENTER;
|
|
|
|
}
|
|
|
|
update(dt: number) {}
|
|
}
|