传3-修改(父节点,,子节点)

image.png

课程入口,点击进入

《游戏前端UI开发与血条系统实现》课程总结

上课日期:2025年9月5日

上课时间:晚上9:11

上课时长:1小时45分钟21秒


一、课程核心内容

这节课是游戏前端UI开发与血条系统实现的实战课程,重点讲解了游戏血条系统的前端实现、UI自适应调整、层级管理以及交互功能的完善。课程展示了从前端UI设计到功能实现的完整流程,特别强调了移动端适配和用户体验优化。

技术重点

  1. 血条系统实现 - 动态血量显示与动画效果
  2. UI自适应设计 - 多分辨率适配与移动端优化
  3. 层级管理 - 界面元素的层级控制与显示优化
  4. 交互功能 - 血条显示控制与战斗逻辑
  5. 前端调试 - UI元素的精确定位与效果调试

二、课程时间线梳理

00:00-30:00 - 血条系统基础实现

  • 血量变化触发机制的建立
  • 血条UI元素的创建与定位
  • 基础显示功能的调试

30:00-60:00 - UI效果优化

  • 血条颜色与渐变效果调整
  • 数字显示的位置精调
  • 动画效果的添加与优化

60:00-90:00 - 移动端适配

  • 手机端UI的自适应调整
  • 不同分辨率的兼容性测试
  • 触控交互的优化考虑

90:00-105:00 - 功能完善

  • 血条显示控制功能
  • 层级管理问题解决
  • 战斗交互逻辑优化

三、核心技术实现

1. 血条系统架构设计

血量变化监听机制

-- 血量变化事件监听
function onHpChange(self, currentHp, maxHp)
    -- 创建或更新血条显示
    if not self.bloodBar then
        self:createBloodBar()
    end
    self:updateBloodBar(currentHp, maxHp)
end

-- 血条创建函数
function createBloodBar(self)
    self.bloodBar = GUI.CreateBloodBar()
    -- 设置血条位置和样式
    self:setupBloodBarStyle()
end

血条UI元素结构

-- 血条UI层级结构
bloodBar
├── background (血条背景)
├── progressBar (血量进度条)
├── textLabel (血量数字显示)
└── effect (特效层)

2. UI自适应设计实现

分辨率适配方案

-- 自适应位置计算
function calculateAdaptivePosition(self, baseX, baseY)
    local screenWidth = GUI.GetScreenWidth()
    local screenHeight = GUI.GetScreenHeight()
    local scaleX = screenWidth / 1920  -- 基准分辨率宽度
    local scaleY = screenHeight / 1080 -- 基准分辨率高度
  
    return baseX * scaleX, baseY * scaleY
end

-- 血条位置自适应
local adaptiveX, adaptiveY = self:calculateAdaptivePosition(60, 80)
self.bloodBar:SetPosition(adaptiveX, adaptiveY)

移动端特殊处理

-- 移动端UI调整
function adjustForMobile(self)
    if GUI.IsMobile() then
        -- 调整血条大小
        self.bloodBar:SetScale(0.8)
        -- 调整位置避免虚拟按键遮挡
        self.bloodBar:SetPosition(50, 120)
    end
end

3. 血条显示控制功能

显示/隐藏控制

-- 血条显示状态管理
local bloodBarVisible = true

function toggleBloodBar(self)
    bloodBarVisible = not bloodBarVisible
    if bloodBarVisible then
        self.bloodBar:SetVisible(true)
        self:saveBloodBarState(1)  -- 保存状态
    else
        self.bloodBar:SetVisible(false)
        self:saveBloodBarState(0)  -- 保存状态
    end
end

-- 状态保存与恢复
function saveBloodBarState(self, state)
    M2.SetKey(0, self.actor, "blood_bar_visible", tostring(state))
end

function loadBloodBarState(self)
    local state = M2.GetKey(0, self.actor, "blood_bar_visible")
    return tonumber(state) or 1  -- 默认显示
end

控制按钮实现

-- 血条控制按钮
function createBloodBarButton(self)
    local button = GUI.CreateButton()
    button:SetText("显血")
    button:SetPosition(650, 956)  -- 小地图左侧位置
    button:SetSize(80, 30)
    button:SetOnClick(function()
        self:toggleBloodBar()
    end)
    return button
end

4. 层级管理与显示优化

层级控制方案

-- 获取父节点进行层级管理
function setupBloodBarHierarchy(self)
    local playerNode = self:getPlayerNode()
    if playerNode then
        -- 将血条挂载到玩家节点下
        playerNode:AddChild(self.bloodBar)
        -- 设置渲染层级
        self.bloodBar:SetRenderLevel(100)  -- 较高层级确保显示
    else
        -- 备用方案:直接挂载到根节点
        GUI.GetRootNode():AddChild(self.bloodBar)
    end
end

-- 玩家节点获取
function getPlayerNode(self)
    local playerId = self.actor:GetActorID()
    return GUI.GetActorNode(playerId)
end

位置精确定位

-- 血条位置精调
function fineTunePosition(self)
    -- 基础位置调整
    local baseX, baseY = -33, -62
  
    -- 根据角色大小微调
    local actorSize = self.actor:GetSize()
    local adjustY = -actorSize.height * 0.6
  
    self.bloodBar:SetPosition(baseX, baseY + adjustY)
end

5. 动画与效果实现

血量变化动画

-- 血量变化动画
function playHpChangeAnimation(self, oldHp, newHp)
    -- 数字变化动画
    self:playNumberAnimation(oldHp, newHp)
  
    -- 血条进度动画
    self:playProgressBarAnimation(oldHp, newHp)
  
    -- 受伤特效
    if newHp < oldHp then
        self:playHurtEffect()
    end
end

-- 进度条动画
function playProgressBarAnimation(self, oldHp, newHp)
    local oldPercent = oldHp / self.maxHp
    local newPercent = newHp / self.maxHp
  
    -- 使用缓动动画
    self.progressBar:AnimateToPercent(newPercent, 0.3, "EaseOut")
end

颜色渐变效果

-- 血条颜色根据血量变化
function updateBloodColor(self, currentHp, maxHp)
    local percent = currentHp / maxHp
    local color
  
    if percent > 0.7 then
        color = Color.Green  -- 安全血量
    elseif percent > 0.3 then
        color = Color.Yellow  -- 警告血量
    else
        color = Color.Red     -- 危险血量
    end
  
    self.progressBar:SetColor(color)
end

四、重要技术问题与解决方案

1. 血条显示层级问题

问题描述:

血条需要显示在最前端,但会受到其他UI元素的遮挡

解决方案:

-- 设置高渲染层级
self.bloodBar:SetRenderLevel(1000)

-- 或者挂载到UI根节点
local rootNode = GUI.GetUIRoot()
rootNode:AddChild(self.bloodBar)

2. 移动端自适应问题

问题描述:

在不同分辨率的移动设备上显示位置偏差

解决方案:

-- 基于屏幕比例的动态计算
function calculateMobilePosition(self)
    local screenWidth, screenHeight = GUI.GetScreenSize()
    local baseWidth, baseHeight = 1334, 750  -- 基准分辨率
  
    local scaleX = screenWidth / baseWidth
    local scaleY = screenHeight / baseHeight
    local scale = math.min(scaleX, scaleY)
  
    return scale
end

3. 血条控制状态持久化

问题描述:

玩家设置的血条显示状态需要在登录时保持

解决方案:

-- 登录时恢复状态
function onPlayerLogin(self)
    local bloodBarState = self:loadBloodBarState()
    if bloodBarState == 0 then
        self.bloodBar:SetVisible(false)
    else
        self.bloodBar:SetVisible(true)
    end
end

五、用户体验优化要点

1. 视觉设计优化

  • 颜色选择:使用醒目的红色系,确保在各种背景下都能清晰显示
  • 渐变效果:平滑的颜色过渡提升视觉舒适度
  • 数字显示:清晰的字体和合适的字号,确保可读性

2. 交互体验优化

  • 控制便捷:显血按钮放置在易于操作的位置
  • 状态记忆:用户设置的状态自动保存
  • 响应速度:血量变化即时反馈,无延迟感

3. 性能考虑

  • 资源优化:血条UI使用轻量级资源
  • 渲染效率:合理的刷新频率避免性能浪费
  • 内存管理:及时清理不再使用的UI元素

六、课程评价

教学风格:🎨 UI设计、前端优化、用户体验导向

教学亮点

  • 🎯 实战导向:从零开始实现完整的血条系统
  • 📱 多端适配:充分考虑PC端和移动端的差异
  • 🎨 视觉优化:注重UI的美观性和用户体验
  • 性能意识:在实现功能的同时考虑性能影响

技术深度:★★★★☆

实战价值:★★★★★

创新性:★★★★☆

教学价值

  • 培养了前端UI开发的系统思维
  • 强化了多端适配的技术能力
  • 提供了从设计到实现的完整视角

适合人群:适合有一定前端基础,想要深入学习游戏UI开发和用户体验优化的开发者。


七、学习建议

  1. 掌握基础概念:确保理解UI层级、坐标系统、动画原理等基础概念
  2. 实践设计思维:学习基本的UI/UX设计原则,提升产品思维
  3. 关注性能优化:在实现功能的同时考虑性能影响
  4. 多设备测试:在不同设备和分辨率下进行充分测试

实践重点:通过实现类似的UI系统,掌握前端开发的核心技能和用户体验优化方法。


进阶方向:在掌握基础UI开发后,可以进一步学习高级动画效果、Shader编程、3D UI渲染等高级主题,以及跨平台UI框架的开发。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

举报

改内容来自
开发实战
进入
快速回复 返回顶部 返回列表