为OpenClaw工具配置Taotoken作为后端AI供应商的详细步骤
2026/5/12 12:40:55
function _New_Window() { this.initialize(...arguments); }; _New_Window.prototype = Object.create(Window_Base.prototype); _New_Window.prototype.constructor = _New_Window; // 初始化窗口 _New_Window.prototype.initialize = function(rect) { Window_Base.prototype.initialize.call(this, rect); this.npc_text=""; this._lastText = ''; this.paddingScale = 2; this.isWindow = 1; //是什么窗口; }; _New_Window.prototype.refresh = function() { if (this._lastText === this.npc_text) return; // 1. 切割文本 let lines = this.npc_text.split(/\r?\n/); let newLines = []; lines.forEach(row => { if (row.length > 0) { newLines.push(row); } }); lines = newLines; if (lines.length === 0) lines = [""]; // 2. 必须先创建画布,才能测量宽度 if (!this.contents) { this.createContents(); } // 3. 计算最长行宽度 let maxTextW = 0; for (let i = 0; i < lines.length; i++) { let w = this.contents.measureTextWidth(lines[i]); if (w > maxTextW) maxTextW = w; } let lineH = this.lineHeight(); let pad = this.padding * this.paddingScale; // 4. 计算窗口真实大小 this.width = maxTextW + pad ; this.height = lines.length * lineH + pad; // 5. 重置画布 + 清空(你要的 clear 在这里) this.createContents(); this.contents.clear(); // 6. 垂直居中绘制 let totalTextH = lines.length * lineH; let startY = (this.contents.height - totalTextH) / 2; for (let i = 0; i < lines.length; i++) { let y = startY + i * lineH; this.drawText(lines[i], 0, y, this.contents.width, "center"); } // 7. 窗口定位 switch (this.isWindow) { case 0: //整体窗口居中显示 const cx = (Graphics.width - this.width) / 2; const cy = (Graphics.height - this.height) / 2; this.move(cx, cy, this.width, this.height); break; case 1://某个精灵顶部定位 this.move(0 - this.width / 2, 0 - this.height - 74, this.width, this.height); break; } this._lastText = this.npc_text; }; _New_Window.prototype.update = function(){ this.refresh(); };