[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 将会加入粒子效果来掩盖玩家的死亡。

作者:Sy_

评论

  1. TobyKSKGD
    Windows Edge
    8 月前
    2024-7-07 23:29:51

    • Sy
      TobyKSKGD
      Windows Edge
      8 月前
      2024-7-08 18:26:08

      xixi

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇