206 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			206 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
|  | import { _decorator, Color, Director, director, easing, game, Label, Node, Size, Sprite, SpriteFrame, tween, UITransform, VerticalTextAlignment } from 'cc'; | ||
|  | import { BaseSprite } from '../GlobalScript/CommonComponent/BaseSprite'; | ||
|  | import { NpkImage } from '../Tool/NPKImage'; | ||
|  | import { BaseSpriteFrame } from '../GlobalScript/CommonComponent/BaseSpriteFrame'; | ||
|  | const { ccclass } = _decorator; | ||
|  | 
 | ||
|  | /// 玩家角色类型
 | ||
|  | export enum CharacterType{ | ||
|  |     /// 剑魂
 | ||
|  |     JianHun = 0, | ||
|  |      | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | /// 玩家Node封装
 | ||
|  | @ccclass('Gamer') | ||
|  | export class GamerNode extends Node { | ||
|  | 
 | ||
|  |     /// 玩家角色类型
 | ||
|  |     private _characterType : CharacterType; | ||
|  | 
 | ||
|  |     /// 玩家名称
 | ||
|  |     private GamerNameLabel : Label; | ||
|  | 
 | ||
|  |     /// 幻想点数
 | ||
|  |     private _count: number = 0; | ||
|  |     private countLabel: Label; | ||
|  | 
 | ||
|  |     /// 玩家排序的精灵
 | ||
|  |     private serialNumberSprite: Sprite; | ||
|  |     private serialOneFrame: SpriteFrame; | ||
|  |     private serialTwoFrame: SpriteFrame; | ||
|  |     private serialThreeFrame: SpriteFrame; | ||
|  | 
 | ||
|  |     private blue = new Color('00baff'); | ||
|  | 
 | ||
|  |     set charchterType(type:CharacterType){ | ||
|  |         if(!this.getChildByName('GamerCharacterNode')){ | ||
|  |             this._characterType = type; | ||
|  |             this.initCharacterNode(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 设置新的幻想点数
 | ||
|  |     set count(newCount: number){ | ||
|  | 
 | ||
|  |         let numberString = newCount.toLocaleString(); | ||
|  | 
 | ||
|  |         const obj = {n:this._count}; | ||
|  | 
 | ||
|  |         if (numberString != this.GamerNameLabel.string){ | ||
|  |             tween(obj).to(1.0,{ n: newCount },{onUpdate:(target,ration)=>{ | ||
|  |                 this._count = obj.n; | ||
|  |                 const count:number = parseInt(obj.n.toFixed(0)); | ||
|  |                 this.countLabel.string = count.toLocaleString(); | ||
|  |                 this.countLabel.color = this.getCountColor(obj.n); | ||
|  |             }},).start(); | ||
|  |         } | ||
|  | 
 | ||
|  |          | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 设置玩家名称
 | ||
|  |     set gamerName(newName: string){ | ||
|  |         let name = newName; | ||
|  |         if (name.length > 6){ | ||
|  |             name = newName.slice(0,3) + '...' + newName.slice(newName.length - 3); | ||
|  |         } | ||
|  |         this.GamerNameLabel.string = name; | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 玩家排序
 | ||
|  |     set serialNumber( serial: 1 | 2 | 3){ | ||
|  |         switch (serial) { | ||
|  |             case 1: | ||
|  |                 this.serialNumberSprite.spriteFrame = this.serialOneFrame; | ||
|  |                 this.GamerNameLabel.color = Color.RED; | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 this.serialNumberSprite.spriteFrame = this.serialTwoFrame; | ||
|  |                 this.GamerNameLabel.color = this.blue; | ||
|  |                 break; | ||
|  |             case 3: | ||
|  |                 this.serialNumberSprite.spriteFrame = this.serialThreeFrame; | ||
|  |                 this.GamerNameLabel.color = Color.GREEN; | ||
|  |                 break; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     private getCountColor(count:number):Color{ | ||
|  |         if ( count < 50000){ | ||
|  |             return Color.RED; | ||
|  |         }else if ( count < 200000){ | ||
|  |             return Color.YELLOW; | ||
|  |         }else{ | ||
|  |             return this.blue; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |      | ||
|  |     constructor(gamerName:string){ | ||
|  |         super(); | ||
|  | 
 | ||
|  |         this.initBackgroundNode(); | ||
|  |         this.initPNode(); | ||
|  |         this.initCountNode(); | ||
|  |         this.initGamerNameNode(); | ||
|  |         this.initSerialNumberNode(); | ||
|  | 
 | ||
|  |         this.gamerName = gamerName; | ||
|  | 
 | ||
|  |         /// 提前加载精灵帧
 | ||
|  |         new BaseSpriteFrame(NpkImage.ingame, 1, _SpriteFrame => { this.serialOneFrame = _SpriteFrame }); | ||
|  |         new BaseSpriteFrame(NpkImage.ingame, 2, _SpriteFrame => { this.serialTwoFrame = _SpriteFrame }); | ||
|  |         new BaseSpriteFrame(NpkImage.ingame, 3, _SpriteFrame => { this.serialThreeFrame = _SpriteFrame }); | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 背景
 | ||
|  |     initBackgroundNode(){ | ||
|  |         /// 背景节点
 | ||
|  |         const backgroundNode = new Node('GamerBackgroundNode'); | ||
|  |         this.addChild(backgroundNode); | ||
|  | 
 | ||
|  |         /// 给背景节点添加 baseSprite 组件
 | ||
|  |         const backgroundComponent = backgroundNode.addComponent( BaseSprite ); | ||
|  |         backgroundComponent.updateSpriteFrame(NpkImage.ingame,32); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 角色
 | ||
|  |     initCharacterNode(){ | ||
|  |         const node = new Node('GamerCharacterNode'); | ||
|  |         this.addChild(node); | ||
|  | 
 | ||
|  |         /// 添加 baseSprite 组件
 | ||
|  |         const backgroundComponent = node.addComponent( BaseSprite ); | ||
|  |         backgroundComponent.updateSpriteFrame(NpkImage.character_sd,this._characterType); | ||
|  |     } | ||
|  | 
 | ||
|  |     /// P图标
 | ||
|  |     initPNode(){ | ||
|  |         const node = new Node('GamerPNode'); | ||
|  |         this.addChild(node); | ||
|  | 
 | ||
|  |         node.setPosition(50,-9.5); | ||
|  | 
 | ||
|  |         /// 添加 baseSprite 组件
 | ||
|  |         const backgroundComponent = node.addComponent( BaseSprite ); | ||
|  |         backgroundComponent.updateSpriteFrame(NpkImage.ingame,51); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 幻想点数
 | ||
|  |     initCountNode(){ | ||
|  |         const node = new Node('GamerCountNode'); | ||
|  |         this.addChild(node); | ||
|  | 
 | ||
|  |         node.setPosition(100,-18); | ||
|  |         const trf = node.addComponent(UITransform); | ||
|  |         trf.contentSize = new Size(60,20); | ||
|  | 
 | ||
|  |         const label = node.addComponent(Label); | ||
|  |         label.fontSize = 14; | ||
|  |         label.string = '0'; | ||
|  |         label.color = Color.RED; | ||
|  |         label.verticalAlign = VerticalTextAlignment.CENTER; | ||
|  |         this.countLabel = label; | ||
|  | 
 | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 玩家名称
 | ||
|  |     initGamerNameNode(){ | ||
|  |         const node = new Node('GamerNameNode'); | ||
|  |         this.addChild(node); | ||
|  | 
 | ||
|  |         node.setPosition(90,-40); | ||
|  |         const trf = node.addComponent(UITransform); | ||
|  |         trf.contentSize = new Size(100,20); | ||
|  | 
 | ||
|  |         const label = node.addComponent(Label); | ||
|  |         label.string = ''; | ||
|  |         label.fontSize = 12; | ||
|  |         label.color = Color.GRAY; | ||
|  |         label.verticalAlign = VerticalTextAlignment.CENTER; | ||
|  | 
 | ||
|  |         this.GamerNameLabel = label; | ||
|  |     } | ||
|  | 
 | ||
|  |     /// 玩家顺序
 | ||
|  |     initSerialNumberNode(){ | ||
|  |         const node = new Node('GamerNameNode'); | ||
|  |         this.addChild(node); | ||
|  | 
 | ||
|  |         node.setPosition(160,-30); | ||
|  | 
 | ||
|  |         this.serialNumberSprite = node.addComponent( Sprite ); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 |