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

本文介绍了如何在Unity3D中创建敌对角色,包括导入素材、设置动画、编写Enemy脚本,以及将敌人添加到主场景并使用Timer实现定时生成。作者详细描述了每个步骤和关键代码段。
摘要由CSDN通过智能技术生成

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

一、创建敌人动画

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=value
		match 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():
	pass

func 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()

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

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

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏自学

生活不易,打赏随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值