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: '二维码生成中,请查看控制台日志' };
|
|
|
|
|
}
|
|
|
|
|
}
|