【Godot4自學手冊】第十九節敵人的血量顯示及掉血特效

這一節,我主要學習敵人的血量顯示、掉血顯示和死亡效果。敵人的血量顯示和主人公的血量顯示有所不同,主要是在敵人頭頂有個紅色的血條,受到攻擊敵人的血條會減少,并且有掉血數量的文字顯示,效果如下:
請添加圖片描述

一、創建敵人的血條

1.節點布局

新建Node場景命名為HealthBar,給HealthBar添加3個子節點,一是TextureProgressBar命名為HbarTxp,二是Label命名為ShowLb,三是AnimationPlayer命名為AnimaP。整個場景節點情況如下:
請添加圖片描述

保存場景到Scenes文件夾下。

2.設置血條

選擇HbarTxp節點, 在其檢查器中Textures->Progress選擇新建AtlasTexture(紋理圖集),然后單擊該圖集在其屬性面板中,將我們做好的血量圖片拖拽到Atlas下,操作圖如下:
請添加圖片描述

下一步單擊Region->編輯區域按鈕,在彈出的區域編輯器中,吸附模式選擇自動裁剪,然后單擊紅色血條,然后選擇關閉。操作過程如下:
請添加圖片描述

同理,設置Textures->Over,操作過程類似,只不過背景圖片選擇血條背景圖片框,選擇的圖片如下:
請添加圖片描述

HbarTxp檢查器中將Textures->Progess Offset設置為(1,1),如下:
請添加圖片描述

最后,在HbarTxp檢查器中將Radial Fill->Max Value 設置為1,Step設置為0,Value設置為0,5,參數如下:
請添加圖片描述

在編輯器中調整HealthBar居中,最后效果如下:
請添加圖片描述

3.設置文本顯示

選擇ShowLb結點,在其檢查器中將Text屬性隨便輸入一個數字10。Theme Overrides->Colors->Font Color選擇紅色,如下:
請添加圖片描述

在編輯器中調整ShowLb到血量條的正上方,最后效果如下:
請添加圖片描述

4.設置文字動畫

選擇AnimaP節點,在其動畫面板中“動畫”按鈕下拉菜單中選擇新建動畫。
請添加圖片描述

新動畫名稱設置為Hurt。
請添加圖片描述

動畫時長設置為0.6,將播放頭放到第1幀,選擇ShowLb,在其檢查器中Layout->Transform->Position后面的關鍵幀按鈕將此關鍵幀添加到動畫第一幀。
請添加圖片描述

將播放頭放到第4幀,向上調整ShowLb到合適位置,同理將該位置添加到第4關鍵幀。
將播放頭放到第1幀,選擇ShowLb,在其檢查器中Theme Overrides->Colors->Font Color后面的關鍵幀按鈕將此關鍵幀添加到動畫第一幀。
請添加圖片描述

同樣設置第3幀。將播放頭放到第7幀(動畫最后),選擇ShowLb,在其檢查器中Theme Overrides->Colors->Font Color,將透明度設置為0,如下:
請添加圖片描述

設置完成后單擊后方的動畫關鍵幀將透明度為0添加到動畫末尾,最后動畫面板中Hurt動畫設置如下:
請添加圖片描述

最終的動畫效果如下:
請添加圖片描述

5.編寫腳本代碼

給跟節點添加添加腳本,命名為health_bar,保存到Scripts文件夾下。并編寫如下代碼:

extends Node2D
@export var stats:Stats  #定義狀態繼承自Stats
@onready var hbar_txp = $HbarTxp
@onready var show_lb = $ShowLb
@onready var anima_p = $AnimaPvar oldhealth# Called when the node enters the scene tree for the first time.
func _ready():show_lb.visible=false #血量變化文字隱藏顯示oldhealth = stats.health  #記錄上次血量stats.health_changed.connect(update_health)  #血量變化信號連接到血量更新UIupdate_health()# Called every frame. 'delta' is the elapsed time since the previous frame.
func update_health():var percentage :=stats.health/ float(stats.max_health)  #計算血量百分比hbar_txp.value = percentage  #將百分比賦給進度條var healthcharge = stats.health-oldhealth #計算血量編號if(healthcharge!=0):		show_lb.text=str(healthcharge) #血量變化復制給lableshow_lb.visible=true  #顯示血量變化數字anima_p.play("Hurt") #播放血量位置隱藏動畫oldhealth=stats.health  #記錄目前血量pass

二、給敵人添加血量

切換到Enemy場景,選擇根節點,第一是單擊添加子節點按鈕,在創建Node結點對話框選擇Stats,這個類是我們自定義的狀態類,單擊創建。
請添加圖片描述

第二是單擊實例化子場景按鈕,在彈出的實例化子場景對話中選擇,我們剛才新建的health_bar.tsc場景,然后單擊打開按鈕,將health_bar實例化到Enemy場景。
請添加圖片描述

選中HealthBar結點,然后在其檢查器中Stats屬性上單擊,在彈出對話框中stats,單擊確定,這樣stats狀態就和HealthBar鏈接起來了。
請添加圖片描述

三、編寫代碼

切換到Enemy代碼,編寫代碼。首先獲取狀態結點,代碼如下:

@onready var stats = $Stats

然后修改hurt_state受傷代碼:

stats.health -=10  #受傷一次減去10點血量var dir = hurtdirecion.direction_to(global_position).normalized()if abs(dir.x)>abs(dir.y):if dir.x<0:velocity.x =-knockbackelse :velocity.x =knockbackelse:if dir.y<0:velocity.y =-knockbackelse :velocity.y =knockbackanima_p.play("TakeHit")await  anima_p.animation_finished	if stats.health<=0:#血量小于等于零時,敵人進入死亡狀態state=DEATHelse:velocity = Vector2.ZEROstate=CHASE

這樣,敵人就有血量顯示了。今天就到這了,下節再見!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《中華人民共和國消防法》(2021年修訂版)解讀

單選題&#xff08;共7題&#xff0c;每題5分&#xff09; 1、舉辦大型群眾性活動&#xff0c;承辦人應當依法向&#xff08;&#xff09;申請安全許可。 正確答案&#xff1a;B、公安機關 2、違反消防安全規定進入生產、儲存易燃易爆危險品場所的&#xff0c;情節嚴重的要處…

基于springboot+vue的醫院后臺管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

胎神游戲集第一期

目錄 一、變色小跳龍 二、超級按鈕 三、超級迷宮 四 、城市守衛戰 五、 憤怒的小胎 既然是胎神游戲集&#xff0c;那當然要先感謝我們的胎神大大了 胎神洛谷名&#xff1a;TSzza 好了&#xff0c;言歸正傳&#xff0c;知道你們不喜歡啰嗦&#xff0c;直接上代碼 一、…

SMBGhost漏洞技術分析與防御方案

事件分析 最近國內外各安全廠商都發布了SMBGhost(CVE-2020-0796)漏洞的預警報告和分析報告&#xff0c;筆者利用周末休息時間也研究了一下&#xff0c;就算是做一個筆記了&#xff0c;分享給大家一起學習下&#xff0c;目前外面研究的POC大部分是通過SMB壓縮數據包長度整數溢出…

【openGL4.x手冊04】基元

一、說明 OpenGL 中的術語“基元”用于指代兩個相似但獨立的概念。 “原語”的第一個含義是指 OpenGL 使用的解釋方案來確定渲染時頂點流所代表的內容&#xff0c;例如“GL_POINTS”。這樣的頂點序列可以是任意長的。 “原語”的另一個含義&#xff0c;也稱為“基本原語”&…

如何根據玩家數量和游戲需求選擇最合適的服務器配置?

根據玩家數量和游戲需求選擇最合適的服務器配置&#xff0c;首先需要考慮游戲的類型、玩家數量、預計的在線時間以及對內存和CPU性能的需求綜合考慮。對于大型多人在線游戲&#xff0c;如MMORPG或MOBA等&#xff0c;由于需要更多的CPU核心數來支持更復雜的游戲邏輯和處理大量數…

操作系統|概述|系統分類——筆記

1.1_1操作系統的概念和功能 操作系統的概念 操作系統&#xff08;Operating System&#xff0c; OS&#xff09; 是指控制和管理整個計算機系統的 硬件和軟件 資源&#xff0c;并合理地組織調度計算機和工作和資源的分配&#xff1b; 1操作系統是系統資源的管理者 以提供給用…

springboot攔截器和過濾器

過濾器 Filter依賴于servlet容器&#xff0c;屬于servlet規范的一部分 Filter的生命周期由servlet容器管理 Filter可攔截所有web資源(包括jsp&#xff0c;Servlet&#xff0c;靜態資源&#xff0c;Controller) 自定義Filter import javax.servlet.*; WebFilter(urlPatterns …

文件的順序讀寫函數舉例介紹

目錄 例1&#xff1a;&#xff08;使用字符輸出函數fputc&#xff09;例2&#xff1a;&#xff08;使用字符輸入函數fgetc&#xff09;例3&#xff1a;&#xff08;使用文本行輸出函數fputs &#xff09;例4&#xff1a;&#xff08;使用文本行輸入函數fgets &#xff09;例5&a…

Docker基礎教程 - 2 Docker安裝

更好的閱讀體驗&#xff1a;點這里 &#xff08; www.doubibiji.com &#xff09; 2 Docker安裝 Docker 的官網地址&#xff1a;https://www.docker.com/&#xff0c;在官網可以找到 Docker Engine 的安裝步驟。 下面進行 Docker 環境的安裝&#xff0c;正常情況下 Docker …

服務發現:CP or AP?

1 服務發現的意義 為高可用&#xff0c;生產環境中服務提供方都以集群對外提供服務&#xff0c;集群里這些IP隨時可能變化&#xff0c;也需要用一本“通信錄”及時獲取對應服務節點&#xff0c;這獲取過程即“服務發現”。 對服務調用方和服務提供方&#xff0c;其契約就是接…

(3)(3.1) FlightDeck FrSky發射器應用程序

文章目錄 前言 1 概述 2 Turnkey Packages 3 參數說明 前言 ?Craft and Theory 的 FlightDeck 可讓你輕松查看飛行模式、高度、速度、姿態和關鍵系統警報&#xff0c;包括故障保護和電池錯誤&#xff0c;如電池不平衡警告和發射機低電量警報。 1 概述 Craft and Theory 的…

【自然語言處理】NLP入門(二):1、正則表達式與Python中的實現(2):字符串格式化輸出(%、format()、f-string)

文章目錄 一、前言二、正則表達式與Python中的實現1.字符串構造2. 字符串截取3. 字符串格式化輸出3.1 %符號格式化字符串1. 一般形式2. 常用格式字符3. 最小寬度和精度4. 進位制和科學計數法5. 多個對象的格式化輸出6. 典例 3.2 format()方法格式化字符串1. 一般形式2. 參數傳遞…

51單片機-(中斷系統)

51單片機-&#xff08;中斷系統&#xff09; 了解51單片機中斷系統、中斷源、中斷響應條件和優先級等&#xff0c;通過外部中斷0實現按鍵控制LED亮滅為例理解中斷工作原理和編程實現過程。 1.中斷系統結構 89C51/52的中斷系統有5個中斷源 &#xff0c;2個優先級&#xff0c;…

WiFi模塊引領智能家居革命:連接未來的生活

隨著科技的快速發展&#xff0c;智能家居正成為現代生活的一部分&#xff0c;極大地改變了我們與家庭環境互動的方式。其中&#xff0c;WiFi模塊作為關鍵的連接技術&#xff0c;在推動智能家居革命中發揮著不可忽視的作用。本文將深入探討WiFi模塊如何驅動智能家居革命。 設備互…

1027 打印沙漏

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”&#xff0c;要求按下列格式打印 ***** *** * *** ***** 所謂“沙漏形狀”&#xff0c;是指每行輸出奇數個符號&#xff1b;各行符號中心對齊&#xff1b;相鄰兩行符號數差2&#xff1b;符號數先從大到…

多線程:線程通信

線程通信 什么是線程通信 當多個線程共同操作共享的資源時&#xff0c;線程間通過某種方式互相告知自己的的狀態&#xff0c;以相互協調&#xff0c;并避免無效的資源爭奪。 線程通信的常見模型&#xff08;生產者與消費者模型&#xff09; 生產者線程負責生產數據消費者線…

對抽象工廠模式的理解

目錄 1 背景1.1 題目描述1.2 輸入描述1.3 輸出描述1.4 輸入示例1.5 輸出示例 2 抽象工廠模式3 思考3.1 我的實現3.2 什么時候用抽象工廠模式&#xff1f;&#xff08;怎么用才是合適的&#xff1f;&#xff09;3.3 [更好的例子](https://refactoringguru.cn/design-patterns/ab…

【探索Linux】—— 強大的命令行工具 P.24(網絡基礎)

閱讀導航 引言一、計算機網絡背景1. 網絡發展歷史 二、認識 "協議"1. 網絡協議概念2. 網絡協議初識&#xff08;1&#xff09;協議分層&#xff08;2&#xff09;OSI參考模型&#xff08;Open Systems Interconnection Reference Model&#xff09;&#xff08;3&…

NoSQL--1.虛擬機網絡配置

目錄 1.初識NoSQL 1.1 NoSQL之虛擬機網絡配置 1.1.1 首先&#xff0c;導入預先配置好的NoSQL版本到VMware Workstation中 1.1.2 開啟虛擬機操作&#xff1a; 1.1.2.1 點擊開啟虛擬機&#xff1a; 1.1.2.2 默認選擇回車CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …