208 lines
7.2 KiB
TypeScript
208 lines
7.2 KiB
TypeScript
// Learn TypeScript:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class NumberToImage extends cc.Component {
|
|
|
|
@property(cc.SpriteAtlas)
|
|
fontUI: cc.SpriteAtlas = null;
|
|
|
|
static font: any = null;
|
|
// LIFE-CYCLE CALLBACKS:
|
|
|
|
onLoad() {
|
|
if (this.fontUI != null) {
|
|
NumberToImage.font = this.fontUI;
|
|
}
|
|
}
|
|
|
|
//第一个参数 数字, 第二个参数 数字间距 第三个参数 占位宽度 第四个参数 目标节点
|
|
static numberToImageNodes(number, width, posX, name, targetNode: cc.Node, middle: boolean = false) {
|
|
const numStr = number.toString();
|
|
let cha = 0;
|
|
if (number > 99) cha = -posX
|
|
else if (number < 10) cha = posX
|
|
if (targetNode.children.length > 0)
|
|
targetNode.removeAllChildren();
|
|
|
|
const digitNodes: cc.Node[] = [];
|
|
for (let i = 0; i < numStr.length; i++) {
|
|
const digit = parseInt(numStr[i], 10);
|
|
const node = new cc.Node();
|
|
const sprite = node.addComponent(cc.Sprite);
|
|
sprite.spriteFrame = this.font._spriteFrames[name + digit + ""];
|
|
digitNodes.push(node);
|
|
}
|
|
|
|
// 计算总宽度
|
|
const totalWidth = (numStr.length - 1) * width + (digitNodes[0]?.width || 0);
|
|
|
|
if (middle) {
|
|
// 计算居中的起始位置
|
|
const startX = -totalWidth / 2;
|
|
for (let i = 0; i < digitNodes.length; i++) {
|
|
const node = digitNodes[i];
|
|
node.x = startX + i * width;
|
|
if (targetNode) node.parent = targetNode;
|
|
}
|
|
} else {
|
|
for (let i = 0; i < digitNodes.length; i++) {
|
|
const node = digitNodes[i];
|
|
node.x = i * width + cha;
|
|
if (targetNode) node.parent = targetNode;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
static getTimeMargin(number, width, name, targetNode: cc.Node) {
|
|
let timeArr = [];
|
|
let total = 0;
|
|
total = number;
|
|
let hour = 0;
|
|
hour = parseInt((total / 3600) + "");//计算整数小时数
|
|
let afterHour = total - hour * 60 * 60;//取得算出小时数后剩余的秒数
|
|
let min = parseInt((afterHour / 60) + "");//计算整数分
|
|
let m = "" + min;
|
|
|
|
if (min < 10) m = "0" + min;
|
|
let afterMin = total - hour * 60 * 60 - min * 60;//取得算出分后剩余的秒数
|
|
let miao = afterMin + "";
|
|
|
|
if (afterMin < 10) miao = "0" + afterMin;
|
|
|
|
let result = m + miao;
|
|
for (let i = 0; i < result.length; i++) {
|
|
const digit = parseInt(result[i], 10);
|
|
timeArr.push(digit);
|
|
}
|
|
|
|
if (targetNode.children.length > 0) {
|
|
for (let i = 0; i < targetNode.children.length; i++) {
|
|
targetNode.children[i].getComponent(cc.Sprite).spriteFrame = this.font._spriteFrames[name + timeArr[i] + ""];
|
|
}
|
|
}
|
|
else {
|
|
for (let i = 0; i < 4; i++) {
|
|
const node = new cc.Node();
|
|
const sprite = node.addComponent(cc.Sprite);
|
|
const digit = timeArr[i];
|
|
// debugger;
|
|
sprite.spriteFrame = this.font._spriteFrames[name + digit + ""];
|
|
// 将节点添加到目标节点下
|
|
node.x = i * width;
|
|
if (i > 1) node.x += 35;
|
|
if (targetNode) node.parent = targetNode;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
static getTimeMargin2(number, width, name, targetNode: cc.Node, middle: boolean = false) {
|
|
let timeArr = [];
|
|
let total = 0;
|
|
total = number;
|
|
let hour = 0;
|
|
hour = parseInt((total / 3600) + "");//计算整数小时数
|
|
let afterHour = total - hour * 60 * 60;//取得算出小时数后剩余的秒数
|
|
let min = parseInt((afterHour / 60) + "");//计算整数分
|
|
let m = "" + min;
|
|
|
|
if (min < 10) m = "0" + min;
|
|
let afterMin = total - hour * 60 * 60 - min * 60;//取得算出分后剩余的秒数
|
|
let miao = afterMin + "";
|
|
|
|
if (afterMin < 10) miao = "0" + afterMin;
|
|
// 将小时部分格式化为两位数
|
|
let h = "" + hour;
|
|
if (hour < 10) h = "0" + hour;
|
|
|
|
let result = m + miao;
|
|
// 拼接小时、分、秒
|
|
if (hour > 0)
|
|
result = h + m + miao;
|
|
for (let i = 0; i < result.length; i++) {
|
|
const digit = parseInt(result[i], 10);
|
|
timeArr.push(digit);
|
|
}
|
|
|
|
const digitNodes: cc.Node[] = [];
|
|
|
|
if (targetNode.children.length > 0) {
|
|
for (let i = 0; i < targetNode.children.length; i++) {
|
|
const node = targetNode.children[i];
|
|
const sprite = node.getComponent(cc.Sprite);
|
|
sprite.spriteFrame = this.font._spriteFrames[name + timeArr[i] + ""];
|
|
digitNodes.push(node);
|
|
}
|
|
}
|
|
else {
|
|
for (let i = 0; i < timeArr.length; i++) {
|
|
const node = new cc.Node();
|
|
const sprite = node.addComponent(cc.Sprite);
|
|
const digit = timeArr[i];
|
|
sprite.spriteFrame = this.font._spriteFrames[name + digit + ""];
|
|
digitNodes.push(node);
|
|
}
|
|
}
|
|
|
|
// 计算总宽度
|
|
const totalWidth = (timeArr.length - 1) * width + (digitNodes[0]?.width || 0);
|
|
|
|
if (middle) {
|
|
// 计算居中的起始位置
|
|
const startX = -totalWidth / 2;
|
|
for (let i = 0; i < digitNodes.length; i++) {
|
|
const node = digitNodes[i];
|
|
node.x = startX + i * width;
|
|
if (i > 1) node.x += 20;
|
|
if (i > 3) node.x += 20;
|
|
if (targetNode) node.parent = targetNode;
|
|
}
|
|
} else {
|
|
for (let i = 0; i < digitNodes.length; i++) {
|
|
const node = digitNodes[i];
|
|
node.x = i * width;
|
|
if (i > 1) node.x += 20;
|
|
if (i > 3) node.x += 20;
|
|
if (targetNode) node.parent = targetNode;
|
|
}
|
|
}
|
|
}
|
|
|
|
// static calculateAndConvert(num1: number, num2: number, operator: '+' | '-' | '*' | '/', spriteFrames: SpriteFrame[]): Node[] {
|
|
// let result: number;
|
|
// switch (operator) {
|
|
// case '+':
|
|
// result = num1 + num2;
|
|
// break;
|
|
// case '-':
|
|
// result = num1 - num2;
|
|
// break;
|
|
// case '*':
|
|
// result = num1 * num2;
|
|
// break;
|
|
// case '/':
|
|
// result = num1 / num2;
|
|
// break;
|
|
// default:
|
|
// throw new Error('不支持的运算符');
|
|
// }
|
|
|
|
// // 处理结果为小数的情况,这里简单取整
|
|
// result = Math.floor(result);
|
|
// return this.numberToImageNodes(result, spriteFrames);
|
|
// }
|
|
|
|
// update (dt) {}
|
|
}
|