本文主要是介绍【Godot4自学手册】第二十一节掉落金币和收集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这一节我们主要学习敌人死亡后随机掉落金币,主人公可以进行拾取功能。
一、新建金币场景
新建场景,节点选择CharacterBody2D,命名为Coins,将场景保存到Scenes目录下。
1.新建节点
为根节点依次添加CollisionShape2D节点,表示金币本身碰撞体;AnimatedSprite2D节点,命名为AnimaS用于播放金币的动画;
Area2D节点,命名为PickBox,用于与主人公发生碰撞,实现金币收集功能,该节点下添加CollisionShape2D,表示碰撞形状。
节点如下:
2.配置节点属性
第一AnimaS节点设置。选中AnimaS节点,在其检查器中Animation->Sprite Frames属性下拉框中选择SpriteFrames,如下图:
在动画帧面板中default动画中单击从精灵表中添加帧按钮,选择我们准备好的金币图片素材,在选择帧对话框中水平设置为8,垂直设置为1,全选帧,然后单击添加帧按钮,这样就把8帧图片添加到default动画里面了,如下:
在动画帧面板中将动画速度设为10FPS,开启动画循环和自动播放功能,如下:
这样我们的动画就设置完成了。
第二PickBox节点配置。为该节点添加CollisionShape2D子节点,命名为pickcollision,然后选中该节点,在其检查器中Shape属性选择CircleShape2D圆形碰撞,大小调整比金币大一些,用于收集金币碰撞。
第三CollisionShape2D节点配置。在其检查器中Shape属性选择CircleShape2D圆形碰撞,大小调整和金币大小相同即可。
3.编写代码
选择根节点,为其添加代码,保存至Scenes下,命名为Coins,编写如下代码:
extends CharacterBody2D
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
var isPick=false
func _ready():#爆金币特效var tween = get_tree().create_tween() #创建间补动画tween.tween_property(self,"velocity",Vector2(randi_range(-100,100),randi_range(-100,-200)),0.5)tween.tween_property(self,"velocity",Vector2(0,300),0.3)tween.tween_callback(velocityZero) #设置X速度0.3秒到达-150 passfunc _physics_process(delta):move_and_slide()passfunc pickUp(): #拾取金币动画if isPick:var tween = get_tree().create_tween() #创建间补动画tween.tween_property(self,"velocity",Vector2(0,-200),0.5) #设置X速度0.3秒到达-150tween.parallel().tween_property(self,"modulate:a",0,0.5) #0.3秒对象变为透明tween.tween_callback(self.queue_free) #播放完间补动画,自动释放金币passfunc velocityZero():velocity = Vector2.ZEROisPick=truefunc _on_pick_box_body_entered(body):pickUp()pass # Replace with function body
上述代码,_ready函数定义了金币初始状态,爆金币特效;pickUp()函数定义了拾取金币特效。
三、敌人场景设置
切换到Enemy场景代码,添加新函数coin_spawn,该函数主要是在主场景根目录下生成一个金币。代码如下:
func coin_spawn():var coin = coinpre.instantiate()coin.position = self.positionGlobals.duplicate_node.add_child(coin)
该代码运行前还需要预先载入金币,代码如下:
var coinpre = preload("res://Scenes/Coins.tscn")
然后修改death_state函数,实现敌人死亡随机爆出1至6个金币,代码如下:
func death_state(): Globals.animation_scene_obj.run_animation({"box":Globals.duplicate_node,"ani_name":"Dealth","position":self.global_position,"scale":Vector2(1,1)})for i in randi_range(1,6):coin_spawn()self.queue_free()
三、最终效果
这样我们就实现敌人死亡后随机调取金币并进行了拾取功能,演示如下:
这篇关于【Godot4自学手册】第二十一节掉落金币和收集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!