function zhuansheng.tigger_tips()
local ui = zhuansheng.parent._ui
local parent = ui.ImageView
local curLevel = lib:get_zs_level() or 0
-- Create tips_layout
local tips_layout = GUI:Layout_Create(parent, "zs_tips_layout"
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-23 15:35:13 |
👁️ 阅读: 16
要判断动画是否在执行,可以给动画设置一个标记(tag),然后通过标记来检查。根据浮生梦老师前端课程内容,可以使用`GUI:Timeline_SetTag`设置标记,用`GUI:Timeline_StopByTag`来测试是否存在该标记的动画。
下面是修改后的代码,在保持你原有逻辑的基础上增加了动画状态判断:
```lua
function zhuansheng.tigger_tips()
local ui = zhuansheng.parent._ui
local parent = ui.ImageView
local curLevel = lib:get_zs_level() or 0
-- 定义动画标记常量
local ANIM_TAG = 1001
-- 先检查是否已经存在该标记的动画
-- 尝试停止该标记的动画(如果存在会停止,不存在也没影响)
GUI:Timeline_StopByTag(parent, ANIM_TAG)
-- 检查tips_layout是否已经存在
local tips_layout = GUI:getChildByName(parent, "zs_tips_layout")
if GUI:Win_IsNull(tips_layout) then
-- 如果不存在,创建新的
tips_layout = GUI:Layout_Create(parent, "zs_tips_layout", 0, 0, 246, 368, false)
GUI:setAnchorPoint(tips_layout, 0.00, 0.00)
GUI:setTouchEnabled(tips_layout, false)
GUI:setTag(tips_layout, 0)
-- Create tips_eff
local tips_eff = GUI:Effect_Create(tips_layout, "zs_tips_eff", 252, 202, 0, 86416, 0, 0, 0, 1)
GUI:setTag(tips_eff, 0)
-- Create tips_img
local tips_img = GUI:Image_Create(tips_layout, "zs_tips_img", 0, 0, "res/yidalu/zhuansheng4.0/zhuansheng tup.png")
GUI:setAnchorPoint(tips_img, 0.00, 0.00)
GUI:setTouchEnabled(tips_img, false)
GUI:setTag(tips_img, 0)
local Text_1 = GUI:Text_Create(tips_img, "zs_Text_1", 260, 110, 34, "#b9b900", [[文本]])
GUI:Text_enableOutline(Text_1, "#000000", 1)
GUI:setAnchorPoint(Text_1, 0.00, 0.00)
GUI:setTouchEnabled(Text_1, false)
GUI:setTag(Text_1, 0)
GUI:Text_setString(Text_1, tostring(curLevel))
-- 执行动画前设置标记
local animAction = lib:widget_popUp_move_to_fadeout(tips_layout)
if not GUI:Win_IsNull(animAction) then
GUI:Timeline_SetTag(animAction, ANIM_TAG)
end
else
-- 如果已经存在,只更新文本内容
local Text_1 = GUI:getChildByName(tips_layout, "zs_Text_1")
if not GUI:Win_IsNull(Text_1) then
GUI:Text_setString(Text_1, tostring(curLevel))
end
-- 检查是否有动画在执行(通过尝试停止动画来判断)
-- 如果动画不存在,Timeline_StopByTag不会有实际效果
-- 这里我们假设lib:widget_popUp_move_to_fadeout函数返回的是动画对象
SL:print("动画已存在或正在执行,跳过移动动画")
end
end
```
**关键点说明:**
1. `GUI:Timeline_StopByTag(parent, ANIM_TAG)` - 尝试停止指定标记的动画
2. `GUI:Timeline_SetTag(animAction, ANIM_TAG)` - 给动画设置标记
3. `GUI:getChildByName(parent, "zs_tips_layout")` - 检查控件是否已存在
4. `GUI:Win_IsNull(tips_layout)` - 判断控件是否为空
**注意:** 这个方案假设你的`lib:widget_popUp_move_to_fadeout`函数返回动画对象。如果它不返回动画对象,你需要修改为在动画开始前设置标记的方式。
要判断动画是否在执行,可以给动画设置一个标记(tag),然后通过标记来检查。根据浮生梦老师前端课程内容,可以使用`GUI:Timeline_SetTag`设置标记,用`GUI:Timeline_StopByTag`来测试是否存在该标记的动画。
下面是修改后的代码,在保持你原有逻辑的基础上增加了动画状态判断:
```lua
function zhuansheng.tigger_tips()
local ui = zhuansheng.parent._ui
local parent = ui.ImageView
local curLevel = lib:get_zs_level() or 0
-- 定义动画标记常量
local ANIM_TAG = 1001
-- 先检查是否已经存在该标记的动画
-- 尝试停止该标记的动画(如果存在会停止,不存在也没影响)
GUI:Timeline_StopByTag(parent, ANIM_TAG)
-- 检查tips_layout是否已经存在
local tips_layout = GUI:getChildByName(parent, "zs_tips_layout")
if GUI:Win_IsNull(tips_layout) then
-- 如果不存在,创建新的
tips_layout = GUI:Layout_Create(parent, "zs_tips_layout", 0, 0, 246, 368, false)
GUI:setAnchorPoint(tips_layout, 0.00, 0.00)
GUI:setTouchEnabled(tips_layout, false)
GUI:setTag(tips_layout, 0)
-- Create tips_eff
local tips_eff = GUI:Effect_Create(tips_layout, "zs_tips_eff", 252, 202, 0, 86416, 0, 0, 0, 1)
GUI:setTag(tips_eff, 0)
-- Create tips_img
local tips_img = GUI:Image_Create(tips_layout, "zs_tips_img", 0, 0, "res/yidalu/zhuansheng4.0/zhuansheng tup.png")
GUI:setAnchorPoint(tips_img, 0.00, 0.00)
GUI:setTouchEnabled(tips_img, false)
GUI:setTag(tips_img, 0)
local Text_1 = GUI:Text_Create(tips_img, "zs_Text_1", 260, 110, 34, "#b9b900", [[文本]])
GUI:Text_enableOutline(Text_1, "#000000", 1)
GUI:setAnchorPoint(Text_1, 0.00, 0.00)
GUI:setTouchEnabled(Text_1, false)
GUI:setTag(Text_1, 0)
GUI:Text_setString(Text_1, tostring(curLevel))
-- 执行动画前设置标记
local animAction = lib:widget_popUp_move_to_fadeout(tips_layout)
if not GUI:Win_IsNull(animAction) then
GUI:Timeline_SetTag(animAction, ANIM_TAG)
end
else
-- 如果已经存在,只更新文本内容
local Text_1 = GUI:getChildByName(tips_layout, "zs_Text_1")
if not GUI:Win_IsNull(Text_1) then
GUI:Text_setString(Text_1, tostring(curLevel))
end
-- 检查是否有动画在执行(通过尝试停止动画来判断)
-- 如果动画不存在,Timeline_StopByTag不会有实际效果
-- 这里我们假设lib:widget_popUp_move_to_fadeout函数返回的是动画对象
SL:print("动画已存在或正在执行,跳过移动动画")
end
end
```
**关键点说明:**
1. `GUI:Timeline_StopByTag(parent, ANIM_TAG)` - 尝试停止指定标记的动画
2. `GUI:Timeline_SetTag(animAction, ANIM_TAG)` - 给动画设置标记
3. `GUI:getChildByName(parent, "zs_tips_layout")` - 检查控件是否已存在
4. `GUI:Win_IsNull(tips_layout)` - 判断控件是否为空
**注意:** 这个方案假设你的`lib:widget_popUp_move_to_fadeout`函数返回动画对象。如果它不返回动画对象,你需要修改为在动画开始前设置标记的方式。
← 返回问答库