floaty.window 如何唤醒配置窗口

已存档
兔如花
9
· 1 个月前
第 1 条补充
·
1 个月前

floaty.window() 如何唤醒 hamibot脚本中的配置

第 2 条补充
·
1 个月前

自动化脚本 如何显示配置模式层

回答

Hamibot AI
1
· 1 个月前

在 Hamibot 中,floaty.window() 创建的悬浮窗本身不直接支持“唤醒配置窗口”的功能,但可以通过自定义布局和交互逻辑实现类似效果。以下是实现方式:


1. 定义悬浮窗布局

在 XML 布局中添加一个按钮或其他触发元素,用于唤醒配置窗口:

<frame gravity="center" bg="#FF0000">
  <text id="text">悬浮文字</text>
  <button id="configBtn" text="打开配置" />
</frame>

2. 通过事件触发配置逻辑

使用 ui.run 在 UI 线程中操作控件,例如点击按钮后显示配置内容:

var w = floaty.window(
  <frame gravity="center" bg="#FF0000">
    <text id="text">悬浮文字</text>
    <button id="configBtn" text="打开配置" />
  </frame>
);

// 点击按钮触发配置逻辑
w.configBtn.onClick(function() {
  ui.run(function() {
    // 示例:修改文本内容为配置界面
    w.text.setText("配置窗口已唤醒");
    // 可在此添加更多配置交互逻辑
  });
});

3. 完全自定义配置窗口(推荐 floaty.rawWindow

如果需要更灵活的配置界面,使用 floaty.rawWindow() 创建原始悬浮窗,自行设计布局和交互:

var configWindow = floaty.rawWindow(
  <frame gravity="center" bg="#77ff0000">
    <vertical>
      <text id="configTitle" text="配置设置" />
      <edittext id="input" hint="输入内容" />
      <button id="saveBtn" text="保存" />
    </vertical>
  </frame>
);

// 显示配置窗口
configWindow.show();

// 保存按钮逻辑
configWindow.saveBtn.onClick(function() {
  var inputText = configWindow.input.getText();
  // 处理保存逻辑
});

4. 保持悬浮窗持续显示

脚本结束时悬浮窗会自动关闭,若需长期运行,使用 setInterval 阻塞线程:

setInterval(() => {}, 1000);

关键点

  • 所有 UI 操作需通过 ui.run 在主线程执行。
  • floaty.window() 提供基础控件(如关闭/调整大小),而 floaty.rawWindow() 更适合自定义复杂配置界面。
  • 若需唤醒配置窗口,需通过按钮点击事件动态更新界面或显示新窗口。

补充回答 1

在 Hamibot 中,floaty.window() 创建的悬浮窗本身不直接支持“唤醒配置窗口”,但可以通过以下方式实现配置交互逻辑:


1. 在悬浮窗中添加配置控件

通过 XML 布局定义配置相关的控件(如输入框、按钮),并绑定事件处理函数:

var configWindow = floaty.window(
  <frame gravity="center" bg="#FF0000">
    <vertical padding="16">
      <text id="configTitle" text="配置设置" />
      <edittext id="configInput" hint="输入配置值" />
      <button id="saveBtn" text="保存配置" />
    </vertical>
  </frame>
);

// 保存按钮事件
configWindow.saveBtn.click(function () {
  var configValue = configWindow.configInput.getText();
  // 将配置值写入 hamibot.env
  hamibot.env.configKey = configValue;
  toast("配置已保存: " + configValue);
});

2. 通过按钮唤醒配置界面

在主悬浮窗中添加一个按钮,点击后显示配置界面:

var mainWin = floaty.window(
  <frame gravity="center" bg="#00FF00">
    <vertical padding="16">
      <text id="mainText" text="主界面" />
      <button id="configBtn" text="打开配置" />
    </vertical>
  </frame>
);

// 配置按钮事件
mainWin.configBtn.click(function () {
  // 显示配置界面
  configWindow.show();
});

3. 读取并初始化配置值

hamibot.env 读取配置值,并动态更新悬浮窗内容:

// 初始化配置值
var savedConfig = hamibot.env.configKey || "默认值";
mainWin.mainText.setText("当前配置: " + savedConfig);

4. 保持悬浮窗持续显示

脚本执行结束后悬浮窗会自动关闭,需使用 setInterval 阻塞线程:

setInterval(() => {}, 1000);

关键点

  • 配置数据存储:通过 hamibot.env 存储和读取配置值(如 hamibot.env.configKey)。
  • UI 操作限制:所有 UI 操作(如修改文本、显示窗口)需通过 ui.run() 在主线程执行。
  • 原始悬浮窗:若需更复杂的配置界面,可使用 floaty.rawWindow() 替代 floaty.window()

补充回答 2

要在自动化脚本中显示配置模式层,需通过以下步骤实现:

  1. 打开在线编辑器
    在脚本编辑界面点击「配置」按钮,进入配置模式。

  2. 定义配置表单
    使用 JSON 格式构建表单结构,例如:

    {
      "name": "TELEMETRY",
      "type": "checkbox",
      "label": "发送使用数据和错误报告",
      "help": "帮助开发者改进脚本"
    }
    
  3. 在代码中读取配置
    通过 hamibot.env 访问用户配置值:

    const { msg } = hamibot.env;
    toastLog(msg);
    
  4. 动态显示配置内容
    根据配置项逻辑控制脚本行为,例如:

    if (hamibot.env.TELEMETRY) {
      hamibot.postMessage('数据上报已开启');
    }
    

配置模式层的 UI 由平台自动渲染,你只需在脚本配置中定义字段规则即可。若需更复杂的交互,可结合 postMessage 实现动态反馈。

ℹ️ 本回答由 AI 生成,内容仅供参考