【Godot4自学手册】第二十一节掉落金币和收集

2024-03-08 09:44

本文主要是介绍【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自学手册】第二十一节掉落金币和收集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/786725

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

linux dlopen手册翻译

名称 dlclose, dlopen, dlmopen 打开和关闭一个共享对象 简介 #include <dlfcn.h>void *dlopen(const char*filename, int flags);int dlclose(void *handle);#define _GNU_SOURCE#include <dlfcn.h>void *dlmoopen(Lmid_t lm

Linux使用收集--持续更新

linux查看目录文件数》》》 查看当前目录大小: [root@xker.com]# du -sh 查看指定目录大小: [root@xker.com]# du -sh /www/xker.com 查看当前目录文件总数: [root@xker.com]# find . -type f |wc -l 查看指定目录文件总数: [root@xker.com]# fi

后台开发 知识点收集

原知识点总结连接,由于有些问题比较熟悉,所以就没有在自己文章中再列出来了 计算机网络 tcp/udp区别http状态码http协议报头字段osi模型、tcp/ip模型以及各层对应的协议session机制、cookie机制tcp三次握手,四次挥手打开网页到页面显示之间的过程https和http的区别post和get的区别ip子网划分两个网络MTU不同时如何通信 数据库 常见问题mysql的两

Git命令文本手册

git init # 初始化本地git仓库(创建新仓库)git config --global user.name "xxx" # 配置用户名git config --global user.email "xxx@xxx.com"

prometheus删除指定metrics下收集的值

Prometheus 删除指定 Metric 官方文档: ​ - https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis Prometheus 的管理 API 接口,官方到现在一共提供了三个接口,对应的分别是快照功能、数据删除功能、数据清理功能,想要使用 API 需要先添加启动参数 --web.en

复杂SQL集合(不断收集中)

1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句?             胜 负 2005-05-09 2 2 2005-05-10 1 2 --------

SMIDI-SAP接口配置手册

目录 一、 SAPERP相关接口配置(必要条件) 1. SAP ERP 配置 1.1 配置