欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > [Godot3.3.3] – 人物死亡动画 part-2

[Godot3.3.3] – 人物死亡动画 part-2

2025/5/23 19:07:39 来源:https://blog.csdn.net/2301_79640368/article/details/140238423  浏览:    关键词:[Godot3.3.3] – 人物死亡动画 part-2

前言

在上一个 part 中已经完成了大部分的逻辑,现在进行一些新的修改。

增加重力

首先将 PlayerDeath 中的 AnimationPlayer 设置为自动播放。

返回 PlayerDeath.gd 并增加一个重力 300,防止玩家的尸体腾空运动。

 
var gravity = 1000

   

_process 函数中更新 y 坐标:

 
extends KinematicBody2D
var velocity = Vector2.ZERO
var gravity = 1000
func _process(delta):
velocity.y += gravity * delta
velocity = move_and_slide(velocity, Vector2.UP) # 第二个参数告诉移动函数地面法向量向上
if (is_on_floor()):
velocity.x = lerp(0, velocity.x, pow(2, -1 * delta)) # 通过线性插值让速度变化更加平滑

   

需要注意的是,这里修改了 pow 中的差值,使之更加平滑了一些,之前的 - 10 有些过于强烈了。

防止玩家重复死亡

到了这里,如果你运行游戏并踩上两个尖刺,你会发现游戏报错了,原因是两个尖刺都会调用玩家 kill() 函数,但是在第一次死亡后玩家已经被删除,这是就会访问空实例。

解决方案如下 (增加一个布尔型判断玩家是否已经死亡,如果已经死亡就直接返回不再调用):

 
var isDying = false
func kill():
if (isDying):
return
isDying = true
var playerDeathInstance = playerDeathScene.instance()
get_parent().add_child_below_node(self, playerDeathInstance)
playerDeathInstance.global_position = global_position
playerDeathInstance.velocity = velocity
emit_signal("died")

   

使相机跟随玩家的尸体

当玩家死后,相机会停留在原地,我们希望相机跟随玩家的尸体一起滑动。

首先将 PlayerDeath 加入 “player_death” 分组,

然后回到 GameCamera 场景进行修改:

 
func acquire_target_position():
var acquire = get_target_position_from_node_group("player")
if (!acquire):
get_target_position_from_node_group("player_death")
func get_target_position_from_node_group(groupName):
var target_group = get_tree().get_nodes_in_group(groupName)
if target_group.size() > 0:
var target = target_group[0]
global_position = target.global_position
# 如果能找到玩家返回设置相机的跟随位置 true,否则返回 false
return true
return false

   

增加了一个可以复用的函数,可以直接返回需要找的目标组是否有孩子,如果有就设置为对应的全局坐标返回真值,如果没有就返回假值。

调用函数,如果找不到玩家组中的玩家结点,就直接去寻找死亡玩家组中的玩家尸体。

然后运行发现如果多次死亡,相机只会停留在死亡玩家组中第一个尸体(因为数组下标为 0 )的位置。

结语

剩余部分将不会放在本一节进行讲解,而是会放在一个单独的 part3 博客中,并且下一 part 将会加入粒子效果来掩盖玩家的死亡。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词