1共50个物品,使用容器,1排5个,全是灰色的,激活后变亮,自动排到最前面,灰色的在后面
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-07-24 17:29:02 |
👁️ 阅读: 12
要实现这个效果,你需要使用TXT脚本配合界面组件来动态生成并管理物品列表。根据课程日志记录,以下是一个实现方案:
1. **初始化界面与变量**:在脚本开头设置一个容器界面,并初始化用于存储物品列表和状态的变量。
2. **生成物品列表**:使用循环结构(WHILE)遍历所有物品,根据激活状态(例如,通过检测某个自定义变量或标志)将物品分为“已激活”和“未激活”两组。
3. **动态排序与显示**:在生成界面时,先显示已激活的物品(变亮),再显示未激活的物品(灰色)。通过坐标计算实现每排5个的网格布局。
4. **激活与更新**:当用户点击某个灰色物品触发激活事件时,更新该物品的状态,并重新跳转(GOTO)到生成列表的函数,刷新界面显示。
下面是一个示例脚本框架:
```txt
[@main]
#ACT
; 初始化物品总数和每排数量
MOV N$物品总数 50
MOV N$每排数量 5
MOV N$当前行 1
MOV N$当前列 1
MOV S$显示内容 ""
; 跳转到生成列表的函数
GOTO @生成列表
#SAY
<Img|x=161.0|y=113.0|reset=1|loadDelay=1|show=0|esc=1|img=public_win32/1900000610.png|move=0|bg=1>
<Layout|x=780.0|y=101.0|width=80|height=80|link=@exit>
<Button|x=800.0|y=114.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<$STR(S$显示内容)>
[@生成列表]
#ACT
; 先处理已激活的物品(变亮)
MOV N$物品索引 1
WHILE N$物品索引 < <$STR(N$物品总数)>
; 检测是否激活(示例:检测变量V$激活标志_<$STR(N$物品索引)>是否等于1)
MOV S$检测变量 V$激活标志_<$STR(N$物品索引)>
#IF
EQUAL S$检测变量 1
#ACT
; 计算坐标
FORMULATION (($STR(N$当前列)>-1)*70 N$X坐标
FORMULATION (($STR(N$当前行)>-1)*30 N$Y坐标
; 生成激活状态的按钮(亮色)
INC S$显示内容 <Button|x=<$STR(N$X坐标)>|y=<$STR(N$Y坐标)>|size=18|color=255|nimg=public_win32/1900000662|link=@激活物品_<$STR(N$物品索引)>>
; 更新列位置
INC N$当前列 1
#IF
LARGE N$当前列 <$STR(N$每排数量)>
#ACT
MOV N$当前列 1
INC N$当前行 1
#ELSESAY
#ENDIF
#ENDIF
INC N$物品索引 1
ENDWHILE
; 再处理未激活的物品(灰色)
MOV N$物品索引 1
WHILE N$物品索引 < <$STR(N$物品总数)>
MOV S$检测变量 V$激活标志_<$STR(N$物品索引)>
#IF
EQUAL S$检测变量 0
#ACT
FORMULATION (($STR(N$当前列)>-1)*70 N$X坐标
FORMULATION (($STR(N$当前行)>-1)*30 N$Y坐标
; 生成未激活状态的按钮(灰色)
INC S$显示内容 <Button|x=<$STR(N$X坐标)>|y=<$STR(N$Y坐标)>|size=18|color=128|nimg=public_win32/1900000662|link=@激活物品_<$STR(N$物品索引)>>
INC N$当前列 1
#IF
LARGE N$当前列 <$STR(N$每排数量)>
#ACT
MOV N$当前列 1
INC N$当前行 1
#ELSESAY
#ENDIF
#ENDIF
INC N$物品索引 1
ENDWHILE
GOTO @main
; 激活物品的事件处理
[@激活物品_*]
#ACT
; 获取物品索引(从链接参数解析)
MOV S$激活索引 <$param1>
; 设置激活标志
MOV V$激活标志_<$STR(S$激活索引)> 1
; 刷新界面
GOTO @生成列表
```
**注意事项**:
- 该脚本使用变量`V$激活标志_X`来存储每个物品的激活状态(1为激活,0为未激活)。你需要根据实际需求调整激活条件的检测方式(例如,检测背包物品、任务进度等)。
- 界面布局的坐标(70和30)和每排数量(5)可以根据你的UI设计进行调整。
- 确保在`WHILE`循环中避免使用`#SAY`,所有界面内容通过`INC S$显示内容`累积到变量,最后在`#SAY`中统一输出。
- 激活事件`[@激活物品_*]`使用了通配符参数`<$param1>`来获取物品索引,确保链接中的索引与变量匹配。
如果某些功能(如更复杂的动态排序或条件判断)无法通过TXT实现,可调用Lua完成。
← 返回问答库