【虚幻引擎】实现类LOL缓慢扣血血条
2023-02-18 16:42:42 时间
实现效果
思路
分两个进度条重叠放, 一个在前面显示深红的真血条,但是背景条完全透明; 一个在背后显示淡红的跟随血条,背景条不透明。
如果 真血条减少: ----跟随血条等待一会后,循环减到真血条百分比。 如果 真血条增加: ----跟随血条直接跳到真血条位置。
实现
我习惯用Lua,所以用Lua演示,思路是一样的。 首先创建一个UserWidget,主要需要两个血条,hp在前,hpBack在后:
hp的背景条透明:
hpBack的进度条半透明:
核心代码:
local cls = {
hpPercent = 1,
hpBackPercent = 1,
--每秒变化量
hpBackAdd = 0.3,
HPBackLoopFunc = nil,
-- 缓存变量
hpBackLastChangeTime = 0,
}
--循环让跟随血条过渡到真血条
function cls:OnHPBackLoop()
local again = true
if self.hpBackPercent > self.hpPercent then
self.hpBackPercent = self.hpBackPercent - self.hpBackAdd * (GF:Now() - self.hpBackLastChangeTime)
self.hpBackLastChangeTime = GF:Now()
end
if self.hpBackPercent <= self.hpPercent then
again = false
self.HPBackLoopFunc = nil
self.hpBackPercent = self.hpPercent
end
self.hpBack:SetPercent(self.hpBackPercent)
return again
end
-- 根据dataModel更新widget显示
function cls:Update(model)
self.hp:SetPercent(model.hpPercent)
self.endurance:SetPercent(model.endurancePercent)
self.hpPercent = model.hpPercent
if self.hpBackPercent <= self.hpPercent then
self.hpBackPercent = self.hpPercent
self.hpBack:SetPercent(self.hpBackPercent)
else
self:DelayCall(0.3, function() --延迟调用
if self.HPBackLoopFunc == nil then
self.hpBackLastChangeTime = GF:Now()
self.HPBackLoopFunc = self:LoopCall(0.01, false, function() --循环调用
return self:OnHPBackLoop()
end)
end
end)
end
end
--[[
DelayCall、LoopCall函数定义
]]--
return cls
相关文章
- SAP UI5 应用 FlexBox 控件 growFactor 的使用方法
- CSS Flex 布局的引入背景
- CSS Flex 布局的 flex-direction 属性讲解
- Java中多线程的ABA问题探讨
- 视频号小店是什么?如何开通视频号小店API?
- 正确理解和使用JAVA中的字符串常量池
- macos如何同时使用登陆多个微信
- 正则表达式清洗文本数据
- 整理文件神器——Q-Dir
- 无网线无显示器环境下配置树莓派连接Wi-Fi开启ssh
- curl 下载地址中有特殊字符解决方案
- 实时渲染对3D设计行业带来哪些改变?
- R语言读取txt,csv和xlsx文件
- 数据结构(1)序章
- 数据结构(2)线性表的顺序存储
- 数据结构(3)单链表
- 数据结构(4)双链表,循环链表,静态链表
- 数据结构(7)栈的应用——括号匹配问题
- 数据结构(8)栈的应用——求值表达式
- 数据结构(9)串的顺序存储结构