[Desarrollo del juego Godot] FlappyBird: 9.1-2 Versión de Stop AnimationPlayer Stop de infinito terreno

Este artículo responde como pregunta de pensamiento de un blogger csdn [Lao Wang del desarrollo del juego]: Cómo darse cuenta de la parada de AnimationPlayer en FlappyBird.
[Realice el enlace del piso ilimitado AnimationPlayer] [ Enlace para
hacer una pregunta]

Es lógico pensar que cuando el juego termina, cuando el pájaro deja de moverse, el movimiento del piso también debe detenerse.
Echemos un vistazo al código del profesor.

#Floor.gd
extends Sprite

func _ready():
	add_to_group("GAME_STATE")

func on_game_over():
	material.set_shader_param("speed",0)

La idea es hacer que la velocidad del sombreador sea cero en la función on_game_over

Y la llamada a la función on_game_over está en bird.gd

#bird.gd
func on_body_entered(_body):
	if _body is StaticBody2D:#碰撞以后
		call_deferred("set_physics_process",false)#停用_physics_process(delta)
		call_deferred("set_contact_monitor",false)#关闭碰撞检测
		AudioManager.play("sfx_hit")#播放碰撞音效
		$AnimationPlayer.play("die")#动画切换到死亡状态
		GameData.update_record()#更新最好成绩记录
		get_tree().call_group("GAME_STATE","on_game_over")#调用GAME_STATE的on_game_over方法【在这儿】

Entonces, significa que cuando el juego termine, el programa ingresará a la función on_body_entered. Y llame al código detrás de él para completar el trabajo de acabado y detener el movimiento del piso.

Teniendo en cuenta que se utilizan dos objetos Sprite en la versión AnimationPlayer para realizar el movimiento del piso, a fin de no repetir el código de detención en el script correspondiente a los dos objetos, esto causa molestia. Considero hacer esto:

Agregar código
Elija agregar el código en AnimationPlayer, el código es el siguiente

#AnimationPlayer.gd
extends AnimationPlayer

func _ready():
	add_to_group("GAME_STATE")
	self.play("floor_1")
	self.play("floor_2")
func stop_an():
    self.stop()

Y agregue una oración (la última oración) en bird.gd

#bird.gd
func on_body_entered(_body):
	if _body is StaticBody2D:#碰撞以后
		call_deferred("set_physics_process",false)#停用_physics_process(delta)
		call_deferred("set_contact_monitor",false)#关闭碰撞检测
		AudioManager.play("sfx_hit")#播放碰撞音效
		$AnimationPlayer.play("die")#动画切换到死亡状态
		GameData.update_record()#更新最好成绩记录
		get_tree().call_group("GAME_STATE","on_game_over")
		get_tree().call_group("GAME_STATE","stop_an")#调用函数完成动画的停止工作

En este punto, incluso si la versión AnimationPlayer del terreno infinito se realiza

Publicado 1 artículo original · elogiado 4 · visitas 778

Supongo que te gusta

Origin blog.csdn.net/weixin_46359868/article/details/105425905
Recomendado
Clasificación