饥荒Mod 开发(二十):显示打怪伤害值

2023-12-23 05:12

本文主要是介绍饥荒Mod 开发(二十):显示打怪伤害值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

饥荒Mod 开发(十九):显示简易血量

源码
当我们和怪物战斗的时候,无论是被攻击还是攻击怪物都不会有伤害显示,画面感太差了,这次我们给打怪增加点乐趣,可以看到掉血。

原理

有生命值的怪物或者角色,如果血量发生变化,无论是加血还是掉血都会收到一个通知,所以我们只需要监听 这个通知就可以,当我们监听到通知的时候显示一个红色文本标签,然后淡淡的消失就可以了

监听生命值变化

-- 在 "health" 组件初始化后执行的函数
AddComponentPostInit("health", function(Health, inst)-- 监听 "healthdelta" 事件,当健康值发生变化时执行的函数inst:ListenForEvent("healthdelta", function(inst, data)-- 如果实例有 "health" 组件if inst.components.health then-- 计算健康值的变化量local amount = (data.newpercent - data.oldpercent) * inst.components.health:GetMaxHealth()-- 如果健康值的变化量的绝对值大于 0.99,则创建伤害指示器if math.abs(amount) > 0.99 then--接下来需要创建一个 伤害文本--CreateDamageIndicator(inst, amount)endendend)
end)

创建伤害显示文本

-- 创建标签的函数,参数为实例和父对象
local function CreateLabel(inst, parent)-- 设置实例不持久化inst.persists = false-- 如果实例没有 Transform 组件,则添加一个if not inst.Transform theninst.entity:AddTransform()end-- 设置实例的位置为父对象的世界位置inst.Transform:SetPosition(parent.Transform:GetWorldPosition())-- 返回实例return inst
end

显示伤害文本动画

--伤害显示
local HEALTH_LOSE_COLOR = {r = 0.7,g = 0,b = 0}
local HEALTH_GAIN_COLOR = {r = 0,g = 0.7,b = 0}local LIFT_ACC = 0.003local LABEL_TIME_DELTA = 0.05
local function CreateDamageIndicator(inst, amount)-- 创建标签实体local labelEntity = CreateLabel(GLOBAL.CreateEntity(), inst)-- 添加标签组件local label = labelEntity.entity:AddLabel()-- 设置字体和字号label:SetFont(GLOBAL.NUMBERFONT)label:SetFontSize(70)-- 设置位置label:SetPos(0, 4, 0)-- 根据伤害数值的正负,设置颜色local colorif amount < 0 thencolor = HEALTH_LOSE_COLORelsecolor = HEALTH_GAIN_COLORend-- 设置颜色和文本label:SetColour(color.r, color.g, color.b)label:SetText(string.format("%d", amount))-- 在新的线程中开始执行动画labelEntity:StartThread(function()-- 初始化一些变量local t = 0local ddy = 0.0local dy = 0.05local side = 0local dside = 0.0local ddside = 0.0local t_max = 0.5local y = 4-- 当标签实体有效且时间未达到最大值时,进行循环while labelEntity:IsValid() and t < t_max do-- 计算新的位置和大小ddy = LIFT_ACC * (math.random() * 0.5 + 0.5)dy = dy + ddyy = y + dyddside = -side * math.random()* 0.15dside = dside + ddsideside = side + dside-- 根据相机的朝向,设置标签的位置local headingtarget = 45 --[[TheCamera.headingtarget]] % 180if headingtarget == 0 thenlabel:SetPos(0, y, 0)  		-- from 3d plane x = 0elseif headingtarget == 45 thenlabel:SetPos(side, y, 0)	-- from 3d plane x + z = 0elseif headingtarget == 90 thenlabel:SetPos(side, y, 0)		-- from 3d plane z = 0elseif headingtarget == 135 thenlabel:SetPos(side, y, 0)		-- from 3d plane z - x = 0end-- 更新时间和字号t = t + LABEL_TIME_DELTAlabel:SetFontSize(70 * math.sqrt(1 - t / t_max))-- 暂停一段时间GLOBAL.Sleep(LABEL_TIME_DELTA)end-- 移除标签实体labelEntity:Remove()end)
end

在这里插入图片描述

这篇关于饥荒Mod 开发(二十):显示打怪伤害值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526827

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类