Files
18xchat/assets/Scripts/test/QRCodeGeneratorTest.ts
T

127 lines
4.5 KiB
TypeScript
Raw Normal View History

2025-09-18 23:33:06 +08:00
import { _decorator, Component, Node, Sprite, Label, Button } from 'cc';
import { QRCodeGenerator } from '../../utils/qrcodeGenerator';
2025-09-21 20:18:24 +08:00
import { logger } from "db://assets/Scripts/Main/Common/Logger";
2025-09-18 23:33:06 +08:00
const { ccclass, property } = _decorator;
/**
* 二维码生成器测试演示
* 展示如何使用 QRCodeGenerator 工具类
*/
@ccclass('QRCodeGeneratorTest')
export class QRCodeGeneratorTest extends Component {
@property(Node)
qrCodeContainer: Node = null!;
@property(Button)
generateBtn: Button = null!;
@property(Label)
statusLabel: Label = null!;
private testTexts = [
'https://example.com',
'Hello World!',
'这是一个中文测试',
'QR Code Generator Test - 二维码生成器测试',
JSON.stringify({ name: 'test', value: 123, timestamp: Date.now() })
];
private currentIndex = 0;
start() {
if (this.generateBtn) {
this.generateBtn.node.on(Button.EventType.CLICK, this.onGenerateClick, this);
}
// 初始生成第一个二维码
this.generateQRCode();
}
private onGenerateClick() {
this.currentIndex = (this.currentIndex + 1) % this.testTexts.length;
this.generateQRCode();
}
private generateQRCode() {
if (!this.qrCodeContainer) {
this.updateStatus('错误: 二维码容器节点未设置');
return;
}
// 清空容器
this.qrCodeContainer.removeAllChildren();
const testText = this.testTexts[this.currentIndex];
this.updateStatus(`正在生成二维码: ${testText.substring(0, 30)}...`);
try {
// 方法1: 生成 Sprite 组件(包含节点)- 异步版本
QRCodeGenerator.generateQRCodeSprite(testText, 200, 8, (qrSprite) => {
if (qrSprite) {
// 将生成的 Sprite 节点添加到容器中
qrSprite.node.setParent(this.qrCodeContainer);
qrSprite.node.setPosition(0, 0, 0);
this.updateStatus(`✓ 成功生成二维码 (${this.currentIndex + 1}/${this.testTexts.length})`);
// 打印一些调试信息
2025-09-21 20:18:24 +08:00
logger.log('QRCode生成成功:', {
2025-09-18 23:33:06 +08:00
text: testText,
spriteFrame: qrSprite.spriteFrame,
size: qrSprite.spriteFrame?.texture?.width + 'x' + qrSprite.spriteFrame?.texture?.height
});
} else {
this.updateStatus('✗ 生成二维码失败');
}
});
// 演示方法2: 生成 SpriteFrame 并应用到现有节点(异步版本)
// QRCodeGenerator.generateQRCodeSpriteFrame(testText, 200, 8, (spriteFrame) => {
// if (spriteFrame && existingSpriteNode) {
// const sprite = existingSpriteNode.getComponent(Sprite);
// if (sprite) {
// sprite.spriteFrame = spriteFrame;
// }
// }
// });
// 演示方法3: 生成 Base64 字符串
// const base64 = QRCodeGenerator.generateQRCodeBase64(testText, 200, 8);
2025-09-21 20:18:24 +08:00
// logger.log('QRCode Base64:', base64.substring(0, 100) + '...');
2025-09-18 23:33:06 +08:00
} catch (error) {
2025-09-21 20:18:24 +08:00
logger.error('QRCode生成测试失败:', error);
2025-09-18 23:33:06 +08:00
this.updateStatus('✗ 生成失败: ' + error.message);
}
}
private updateStatus(message: string) {
if (this.statusLabel) {
this.statusLabel.string = message;
}
2025-09-21 20:18:24 +08:00
logger.log('QRCodeTest:', message);
2025-09-18 23:33:06 +08:00
}
/**
* 静态方法示例:在其他地方直接调用
*/
public static createQRCodeExample() {
// 示例1: 生成网址二维码(异步)
QRCodeGenerator.generateQRCodeSprite('https://www.example.com', 256, 4, (urlQR) => {
2025-09-21 20:18:24 +08:00
logger.log('URL二维码生成完成:', urlQR);
2025-09-18 23:33:06 +08:00
});
// 示例2: 生成文本二维码,自定义尺寸(异步)
QRCodeGenerator.generateQRCodeSpriteFrame('Hello World!', 300, 10, (textQR) => {
2025-09-21 20:18:24 +08:00
logger.log('文本二维码生成完成:', textQR);
2025-09-18 23:33:06 +08:00
});
// 示例3: 生成Base64格式二维码(同步)
const base64QR = QRCodeGenerator.generateQRCodeBase64('测试数据', 150, 5);
2025-09-21 20:18:24 +08:00
logger.log('Base64二维码生成完成:', base64QR.substring(0, 100) + '...');
2025-09-18 23:33:06 +08:00
return { message: '二维码生成中,请查看控制台日志' };
}
}