import { _decorator, Component, Node, Sprite, Label, Button } from 'cc'; import { QRCodeGenerator } from '../../utils/qrcodeGenerator'; import { logger } from "db://assets/Scripts/Main/Common/Logger"; 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})`); // 打印一些调试信息 logger.log('QRCode生成成功:', { 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); // logger.log('QRCode Base64:', base64.substring(0, 100) + '...'); } catch (error) { logger.error('QRCode生成测试失败:', error); this.updateStatus('✗ 生成失败: ' + error.message); } } private updateStatus(message: string) { if (this.statusLabel) { this.statusLabel.string = message; } logger.log('QRCodeTest:', message); } /** * 静态方法示例:在其他地方直接调用 */ public static createQRCodeExample() { // 示例1: 生成网址二维码(异步) QRCodeGenerator.generateQRCodeSprite('https://www.example.com', 256, 4, (urlQR) => { logger.log('URL二维码生成完成:', urlQR); }); // 示例2: 生成文本二维码,自定义尺寸(异步) QRCodeGenerator.generateQRCodeSpriteFrame('Hello World!', 300, 10, (textQR) => { logger.log('文本二维码生成完成:', textQR); }); // 示例3: 生成Base64格式二维码(同步) const base64QR = QRCodeGenerator.generateQRCodeBase64('测试数据', 150, 5); logger.log('Base64二维码生成完成:', base64QR.substring(0, 100) + '...'); return { message: '二维码生成中,请查看控制台日志' }; } }