无望其速成,无诱于势利。
一、展示
本文目的在于快速搭建一个测试场景,用于其他文章的测试,包含:
- 可移动玩家 2.可收集物品 3. 基本地形
(一)节点结构
1. player.tscn
- Player(CharacterBody2D)
- Sprite2D
- CollishionShape2D
2. egg.tscn
- Egg (Sprite2D)
- PickUpComponent(Area2D)
- CollishionShape2D
3. test_world.tscn
- TestWorld (Node2D)
- TileMapLayer
- Player(见1)
- Camera2D
- Egg(见2)
4. 输入设置
5. 示例
(二)代码
1. player.gd
extends CharacterBody2D
## 创建W、A、S、D移动的Player
# 移动速度
@export var speed : int = 80
# 控制角色移动
func _physics_process(delta: float) -> void:
var direction : Vector2 = Input.get_vector("left", "right", "up", "down")
velocity = speed * direction
move_and_slide()
2. egg.gd
extends Sprite2D
## 可收集的蛋
# 蛋的默认数量
var stack : int = 1
# 从PickUpComponent连接的信号
func _on_pick_up_component_body_entered(body: Node2D) -> void:
if body is CharacterBody2D:
queue_free() # 删除蛋
二、复刻
(一)按照展示的节点结构创建所有节点,并更改节点名;
(二)为Player和Egg节点附加代码;
(三)导入资产(文末附链接);
(四)添加Player与Egg的Sprite2D精灵图,并配置合适的碰撞形状;
(五)选中Egg场景下的PickUpComponent节点,在检查器->节点中连接body_entered信号到Egg节点;
(六)在TestWorld场景中的TileMap中创建地图;
(七)在项目->项目设置->输入映射中设置方向键位;
(八)运行TestWorld场景测试;
三、自查对照
问题现象 | 关键检查点 | 解决方案 |
---|---|---|
The InputMap action “down” doesn’t exist. Did you mean “ui_down”? | 检查输入映射是否存在left ,right ,up ,down 动作 |
项目设置→输入映射→添加left ,right ,up ,down 并绑定键盘左、右键 |
画面太小 | 检查项目设置->常规->显示->拉伸->缩放 | 调整缩放大小 |
角色像素纹理不清晰 | 检查项目设置->渲染->纹理->画布纹理->默认纹理过滤 | 在默认纹理过滤设置为Nearest |
一个图片包含有多个图片如何导入其中一个到Sprite2D | 检查器中Texture新建AtlasTexture | 导入包含多个图片的图片后,点击编辑区域->自动裁剪,然后选择目标图片即可 |
运行成功但无法拾取物品 | 检查Egg场景下的PickUpComponent是否连接到Egg节点 | 鼠标选中PickUpComponent节点后,在右侧【节点】->【信号】下看到一大堆信号,然后找到body_entered,右键连接到Egg节点上 |
(欢迎评论区讨论!)
四、免费开源资产包
某开源网站精灵图资源包链接: 点击此处
-
进入链接后点击下图按钮
-
然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载)
-
最后点击下图按钮完成下载(注意导入前需解压缩)