function MainTarget.OnClickLockPanel()
local actor = SL:GetMetaValue("ACTOR_DATA", MainTarget._targetID)
if not actor then
return
end
-- 未存活
if not SL:GetMetaValue("PET_ALIVE") then
return
end
-- F9关闭了
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-23 15:16:12 |
👁️ 阅读: 23
这段代码是**目标锁定功能**的前端逻辑。我来给你详细解释一下:
## 功能说明
这是处理**宠物锁定按钮点击**的函数,主要实现以下功能:
### 1. 数据检查阶段
```lua
local actor = SL:GetMetaValue("ACTOR_DATA", MainTarget._targetID)
```
- 获取当前选中的目标对象数据
- 如果目标不存在(actor为nil),直接返回不执行后续操作
```lua
if not SL:GetMetaValue("PET_ALIVE") then
return
end
```
- 检查宠物是否存活
- 宠物死亡时无法锁定,直接返回
```lua
if MainTarget._LockUIState == false then
return
end
```
- 检查UI开关状态(通过F9按键控制)
- UI关闭时不响应点击
### 2. 锁定/解锁逻辑
```lua
local lockID = SL:GetMetaValue("PET_LOCK_ID")
```
- 获取当前已锁定的宠物ID
```lua
if lockID == MainTarget._targetID then --已锁定
GUI:Button_setBright(MainTarget.UI.LockBtn, false)
SL:RequestUnLockPetID(MainTarget._targetID)
else
GUI:Button_setBright(MainTarget.UI.LockBtn, true)
SL:RequestLockPetID(MainTarget._targetID)
end
```
- **已锁定状态**:按钮变暗,发送解锁请求
- **未锁定状态**:按钮高亮,发送锁定请求
### 3. 防连点处理
```lua
GUI:delayTouchEnabled(MainTarget.UI.LockPanel)
```
- 防止玩家快速连续点击
- 给按钮添加短暂的触摸禁用时间
## 核心函数说明
**SL:GetMetaValue("PET_LOCK_ID")**
- 获取当前锁定的宠物ID
- 返回:已锁定宠物的ID或nil
**SL:RequestLockPetID(targetID)**
- 请求锁定指定ID的宠物
- 参数:目标宠物ID
**SL:RequestUnLockPetID(targetID)**
- 请求解锁指定ID的宠物
- 参数:目标宠物ID
**GUI:Button_setBright(button, state)**
- 设置按钮亮度状态
- 参数1:按钮对象
- 参数2:true=高亮,false=变暗
**GUI:delayTouchEnabled(panel)**
- 延迟触摸启用
- 防止按钮连点的常用方法
## 使用场景
这个功能常见于:
1. 玩家选中一个宠物作为攻击目标
2. 点击锁定按钮保持目标不被切换
3. 锁定后宠物死亡或玩家想切换目标时点击解锁
如果你对锁定机制还有疑问,可以问浮生梦老师!他在这方面经验很丰富。
这段代码是**目标锁定功能**的前端逻辑。我来给你详细解释一下:
## 功能说明
这是处理**宠物锁定按钮点击**的函数,主要实现以下功能:
### 1. 数据检查阶段
```lua
local actor = SL:GetMetaValue("ACTOR_DATA", MainTarget._targetID)
```
- 获取当前选中的目标对象数据
- 如果目标不存在(actor为nil),直接返回不执行后续操作
```lua
if not SL:GetMetaValue("PET_ALIVE") then
return
end
```
- 检查宠物是否存活
- 宠物死亡时无法锁定,直接返回
```lua
if MainTarget._LockUIState == false then
return
end
```
- 检查UI开关状态(通过F9按键控制)
- UI关闭时不响应点击
### 2. 锁定/解锁逻辑
```lua
local lockID = SL:GetMetaValue("PET_LOCK_ID")
```
- 获取当前已锁定的宠物ID
```lua
if lockID == MainTarget._targetID then --已锁定
GUI:Button_setBright(MainTarget.UI.LockBtn, false)
SL:RequestUnLockPetID(MainTarget._targetID)
else
GUI:Button_setBright(MainTarget.UI.LockBtn, true)
SL:RequestLockPetID(MainTarget._targetID)
end
```
- **已锁定状态**:按钮变暗,发送解锁请求
- **未锁定状态**:按钮高亮,发送锁定请求
### 3. 防连点处理
```lua
GUI:delayTouchEnabled(MainTarget.UI.LockPanel)
```
- 防止玩家快速连续点击
- 给按钮添加短暂的触摸禁用时间
## 核心函数说明
**SL:GetMetaValue("PET_LOCK_ID")**
- 获取当前锁定的宠物ID
- 返回:已锁定宠物的ID或nil
**SL:RequestLockPetID(targetID)**
- 请求锁定指定ID的宠物
- 参数:目标宠物ID
**SL:RequestUnLockPetID(targetID)**
- 请求解锁指定ID的宠物
- 参数:目标宠物ID
**GUI:Button_setBright(button, state)**
- 设置按钮亮度状态
- 参数1:按钮对象
- 参数2:true=高亮,false=变暗
**GUI:delayTouchEnabled(panel)**
- 延迟触摸启用
- 防止按钮连点的常用方法
## 使用场景
这个功能常见于:
1. 玩家选中一个宠物作为攻击目标
2. 点击锁定按钮保持目标不被切换
3. 锁定后宠物死亡或玩家想切换目标时点击解锁
如果你对锁定机制还有疑问,可以问浮生梦老师!他在这方面经验很丰富。
← 返回问答库