【Godot4自学手册】第十三节初建创建敌人

从本节起,将要学习创建第一人。

一、创建敌人动画

1.导入素材。

在Sprites文件夹下新建Enemy文件夹,并将需要的敌人素材导入到文件夹。文档结构如下:
请添加图片描述

2.创建Enemy场景。

新建场景,根节点设置为CharacterBody2D,命名为Enemy。先为跟节点添加AnimatedSprite2D和CollisionShape2D两个节点,将该场景保存到Scenes目录下。目前场景目录如下:
请添加图片描述

3.完善AnimatedSprite2D节点,实现敌人动画。

AnimatedSprite2D节点属性检查器中sprite_frames属性选择新建sprite_frames,如下:
请添加图片描述

这样就可以在动画帧面板中编辑动画了。
在动画帧点击添加动画按钮,联系添加5个动画,双击名称分别重名为:Idle,Run,Attack,Death,TakeHit五种动画分别对应待机,跑,攻击、死亡和受伤五种状态,如下。
请添加图片描述

下面详细介绍一下动画帧面板中的各个按钮功能。
请添加图片描述

图片对应序号功能如下:

序号功能
1添加动画
2删除动画
3加载后自动播放
4动画循环
55FPS表示动画速度
6从当前位置倒放到选中动画
7从结束时间倒放到选中动画
8暂停、停止动画播放
9从头播放到选中动画
10从当前位置播放到选中动画
11从文件中添加帧
12从精灵表中添加帧
13复制帧
14粘贴帧
15在所选之前插入空白帧
16在所选之后插入空白帧
17向左移动帧
18向右移动帧
19删除帧
20帧持续时间
选中Idle动画,单击从精灵表中添加帧按钮,在弹出对话中选择idle.png图片,然后出现下面对话框:

请添加图片描述

水平设置4,垂直设为1,然后选择四张图片,单击添加4帧按钮。然后将动画设置为加载后自动播放,动画循环、动画速度设置为7FPS,如下:
请添加图片描述

同理,依次设置Run,Attack,Death,TakeHit4个动画。

4.完善CollisionShape2D节点。

CollisionShape2D节点检查器Shape2D属性选择新建CapsuleShape2D,然后调整大小和位置,最终如下:
请添加图片描述

二、创建敌人脚本

为敌人创建enemy.gd脚本,保存到scritpts文件夹内。修改代码如下:

extends CharacterBody2D
enum {IDLE,CHASE,ATTACK,HURT,DEATH
}
const SPEED = 300.0
var state = IDLE:set(value):state=valuematch state:IDLE:idle_state()CHASE:chase_state()ATTACK:attack_state()HURT:hurt_state()DEATH:death_state()func _physics_process(delta):		state =IDLE	move_and_slide()func idle_state():passfunc chase_state():pass
func attack_state():pass
func hurt_state():pass
func death_state():pass

上述代码,定义了敌人的五种状态,分别是闲置、追踪、攻击、受伤和死亡。定义了敌人状态state,当状态改变时,执行对应的状态代码。match函数与主人公调用的位置不同,在第五节中,代码在_physics_process函数里面使用了match,这节我们在更改属性设置时,使用了该函数。别的功能现在指示打架一个框架,今后,我会逐渐完成各部分功能。

三、将敌人添加到主场景

将敌人场景展现到主场景,有两种方法实现:一是在主场景根节点直接点击实例化子场景按钮,或按住快捷键ctrl+shift+A快捷键,选择敌人场景,这样就可以了。第二种方法用编码的方式把敌人加载到主场景中。下面我将用编码实现将敌人添加到主场景,且是每2秒钟出现一个敌人,位置随机。在开始之前,先学习一下Timer节点,它是一个倒数计时器,用指定的间隔进行倒计时,并在到达 0 时发出信号,可以设置为重复或“一次性”模式。
第一步:在主场景中给根节点添加一个Node2D节点,命名为Enemy。
第二步:在主场景中给根节点添加一个Timer节点,检查器中将wait_time设置为2,表示2秒钟执行一次;autostart开启,表示始终自动执行,结果如下:
请添加图片描述

目前,主场景的目录结构如下:
请添加图片描述

第三步:在Main节点的代码中,引入Timer信号。选择Timer节点,切换到节点面板,然后双击timerout信号,选择Main节点,单击连接按钮,这样会在代码中添加 _on_timer_timeout()函数,操作过程如下:
请添加图片描述

第四步:在Main节点代码中录入代码:
首先定义变量enmey_preload,预先加载enemy场景。

var enmey_preload = preload("res://Scenes/enemy.tscn")

编写敌人复制函数,代码如下:

func enemy_spawn():var enemy = enmey_preload.instantiate()enemy.position = Vector2(randi_range(100,1140),randi_range(100,570))$Enemy.add_child(enemy)

第一行代码,实例化敌人;
第二行代码表示设置敌人的位置,x坐标在100,1140直接随机产生,y坐标在100和570之间随机产生;
第三行代码,将实例化的敌人添加到Enemy节点下。
最后在_on_timer_timeout函数中调用enemy_spawn函数:

func _on_timer_timeout():enemy_spawn()

这样,就实现了将敌人添加到主场景中。最后预览效果如下:
请添加图片描述

新年快乐,今天就到这了。谢谢同学们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新wordpress外贸主题

日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题,适合做日用百货的外贸公司搭建跨境电商网站使用。 https://www.jianzhanpress.com/?p5248 添加剂wordpress外贸建站主题 橙色wordpress外贸建站主题,适合做食品添加剂或化工添加剂的外贸公司…

使用MICE进行缺失值的填充处理

在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。 在本文中&#…

家政小程序系统源码开发:引领智能生活新篇章

随着科技的飞速发展,小程序作为一种便捷的应用形态,已经深入到我们生活的方方面面。尤其在家庭服务领域,家政小程序的出现为人们带来了前所未有的便利。它不仅简化了家政服务的流程,提升了服务质量,还为家政服务行业注…

工程问题与学术研究的融合 —— 校企合作

一、工程问题与学术研究的常规融合方法 工程问题与学术研究的融合通常体现在“产学研结合”的模式中,具体策略如下: 1. 需求导向:从实际工程问题出发,明确科研目标。在解决工程问题的过程中,识别出需要进一步研究的基…

Vue.js2+Cesium1.103.0 十五、计算方位角

Vue.js2Cesium1.103.0 十五、计算方位角 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"/> </template><script> /* eslint-disable no-undef */ /* eslint-disable new-cap */ /* eslint-disable n…

代码随想录算法训练营第三十天 | 重新安排行程、N皇后、解数独

目录 重新安排行程N皇后解数独总结 LeetCode 332.重新安排行程 LeetCode 51. N皇后 LeetCode 37. 解数独 重新安排行程 给定一个机票的字符串二维数组 [from, to]&#xff0c;子数组中的两个成员分别表示飞机出发和降落的机场地点&#xff0c;对该行程进行重新规划排序。所有…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月14日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月14日 星期三 农历正月初五 1、 第十四届全国冬季运动会将于17日开幕&#xff0c;部分赛事今天起陆续开赛。 2、 2024年购房政策将进一步宽松&#xff0c;专家称今年买房性价比更高。 3、 春节档票房突破45亿元&#…

docker 3.1 镜像

docker 3.1 镜像命令 拉取镜像 docker pull debian #从 Docker Hub 拉取名为 debian 的镜像docker pull hello-world #从 Docker Hub 拉入名为 hello-world 的镜像‍ 运行镜像/容器 docker run hello-world ‍ 查看本地所有的镜像 docker images​​ 容器生成镜像…

【数据结构】链表OJ面试题3《判断是否有环》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 9. 给定一个链表&#xff0c;判断链表中是否有环。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成…

如何使用六图一表七种武器

六图一表七种武器用于质量管理&#xff1a; 描述当遇到问题时应该用那张图来解决&#xff1a; 一、如果题目说出了质量问题需要找原因&#xff1f; 解&#xff1a;用因果图&#xff0c;因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控&#xff1f; 解&#xff1a…

4核8G服务器支持多少人同时在线访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

【51单片机】LCD1602(江科大)

1.LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:162个字符,每个字符为5*7点阵 2.引脚及应用电路 3.内部结构框图 屏幕: 字模库:类似于数码管的数…

一起玩儿Proteus仿真(C51)——05. 红绿灯仿真(一)

摘要&#xff1a;本文介绍如何仿真红绿灯 今天来做一个红绿灯仿真的程序&#xff0c;这个程序主要包括一下这些功能&#xff1a; 模拟的路口为十字交叉路口&#xff0c;假设东西和南北方向都是双向行驶&#xff0c;因此需要设置4组红绿灯和4个倒计时显示屏。倒计时时间最长为9…

【教程】C++语言基础学习笔记(七)——Array数组

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

Linux_进程概念

硬件系统 软件系统 进程概念 进程状态 孤儿进程 进程优先级 一.硬件系统 1.1 冯诺依曼体系结构 数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#xff08;运算器、控制器、存储器、输入设备、输出设备&a…

Python学习之路-爬虫提高:scrapy基础

Python学习之路-爬虫提高:scrapy基础 为什么要学习scrapy 通过前面的学习&#xff0c;我们已经能够解决90%的爬虫问题了&#xff0c;那么scrapy是为了解决剩下的10%的问题么&#xff0c;不是&#xff0c;scrapy框架能够让我们的爬虫效率更高 什么是scrapy Scrapy是一个为了…

tee漏洞学习-翻译-3:TrustZone exploit for MSM8974

原文&#xff1a;http://bits-please.blogspot.com/2015/08/full-trustzone-exploit-for-msm8974.html 在这篇博文中&#xff0c;我们将介绍利用上一篇文章中描述的 TrustZone 漏洞的完整过程。 在开发此漏洞时&#xff0c;我只使用了我值得信赖的&#xff08;个人&#xff0…

120.乐理基础-五线谱-五线谱的多声部与指法问题

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;119.乐理基础-五线谱-五线谱的标记-CSDN博客 五线谱多声部与简谱的多声部一样&#xff1a;简谱的多声部 五线谱多声部例子&#xff1a;钢琴谱 另一个例子&#xff1a;在纵向上有多个音符 然后放大之后&#xff0c…

【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 本章是51LCD单片机设计的一个环节&#xff0c;完整可前往相应博客查看完整传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下…

详解CC++内存管理(new和delete)

文章目录 写在前面1. C&C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C内存管理方式&#xff08;语法&#xff09;3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. new和delete的实现原理4.1 operator new与operator delete…