Godot学习记录-1:基础操作

想在2025年做游戏?用Godot做出你的第一个2D游戏吧:游戏场景
1,添加节点
e6048493-568d-47dc-ae04-7cfa7bcb9f9b
bf3b805e-84e9-4a3c-bdd2-19f01176166b
2,添加纹理
34ffcc6e-4d80-4e30-9339-f9f04cd837b4
选中刚创建的sprite2D,右侧会显示【检查器】,里面有一个Texture(纹理)选项;
在文件系统中找到对应文件,如res→AssetBundle→Sprites→Background.png文件,拖动此文件到【Texture】框中。

⌈像素图片糊怎么解决?⌋
屏幕截图 2025-08-19 162012
左上角【项目】→【项目设置】→【渲染】→【纹理】→【默认纹理过滤】选择【Nearest】
(【渲染】是大标题的渲染不是【国际】下面的渲染!)
3,添加摄像机
f52a6b84-58b5-4438-9b84-f2520a8cfde2
godot默认只会显示蓝框的内容,所以这个场景直接运行的结果是⬇
219063fd-f84c-457a-a0fe-4625ac272149
要显示场景,首先需要添加摄像机camera2D节点
933a22da-fff7-4f28-a53b-a76916863aa7
粉色方框即为camera2D的显示内容
bdf42d4a-b9e3-429e-98bd-bd7b710cf62d
通过修改检查器中Zoom的数值来修改摄像机的渲染范围
db474342-a06d-420d-8e5c-4407786fa9e1
※tip1:可以通过给节点上锁的方式防止误点击某节点(也可CTRL+L)
c4d67b7b-7f31-49fa-8a21-ca3675d48bf8
※tip2:玩家节点需要单独建一个场景,然后再在环境场景中调用玩家场景,godot允许场景相互调用
4,添加玩家场景
通过点击【+】号添加新场景,并创建character2D节点
ae197dbe-a6e9-46b8-bae5-3b88061781c0
添加玩家图片:首先搜索并创建AnimatedSprite2D类型节点,AnimatedSprite2D可以设置动画;并在Animation→Sprite Frames新建SpriteFrames
屏幕截图 2025-08-19 165400
点击SpriteFrames会打开动画面板
c9478ddf-b2e2-42b1-aee1-15bceb5b4a47
点击面板上方的网格按钮(从精灵表中添加帧)添加图片
6b606d15-483a-4fc1-bdcf-33b9e6456df8
精灵表SpriteSheet将每一帧的图像放在同一张图里,就像表格一样。需要按照对应尺寸进行设置,godot才能正确切割每一帧的图像
b2457e77-6d01-4fe9-9821-3dfe3d44e19d
切割好后,选择需要的图片帧,点击添加
c318b85c-bb79-4331-add7-294ff8006008
可以点击播放进行预览,也可以通过设置速度改变帧率,点击左侧的【加载后自动播放】按钮,就可以在游戏开始时默认播放此动画/状态
2adaee6d-f5cf-42da-a58e-0e267298015d
回到主场景,点击链接按钮,再跳出的对话框中选择玩家场景即可
73103da9-4cd1-464a-a840-fccec238c56c
吐槽:这动画添加设置简直比unity简单太多……
5,创建代码脚本
选择玩家场景树,选中Player,点击设置脚本按钮,在弹出的对话框中设置一下模板,点击创建。
e8365d11-8c34-46c5-a76d-c1f3f82483f1
上面的设置脚本按钮同时可以表示取消挂载代码
6,碰撞
用StaticBody2D构造空气墙。
StaticBody2D需要CollisionShape,CollisionShape规定碰撞形状,和unity碰撞体差不多。
给CollisionShape2D的shape设置为WorldBoundaryShape2D,无限延伸的墙
※tip:godot中越靠下的节点优先级越高。
7,物理节点
Area2D:2D 空间中的一个区域,能够检测到其他物理节点是否碰撞了它。
area2D没有velocity属性
8,角色覆盖
不同优先级的物体会发生覆盖,可以在【根节点】中勾选Ordering的Y Sort Enabled,也就是按y轴的位置显示前后关系。
cf41f898-cac3-4a7b-a038-9d471407bb57
9,信号signal
查看area2D能触发的信号:选中area2D节点,点击右侧节点,选择面板下的【信号】栏,即可查看area2D能触发的所有信号。
a8c34b40-a9c8-4018-b233-65d817fe2d5e
以碰撞为例,选择body_entered信号双击,会跳出一个对话框,设置好后点击连接
b8f7b3b5-5f2b-4708-a8a4-63467290bf27
则在area2D上挂在的script脚本会自动创建func _on_body_entered函数。
79254cfc-0e46-4ffb-a6a5-245dbe5c9bc5
每次该信号被触发的时候,就会自动执行这个函数。
10,子弹(Player携带物)
首先为子弹新建场景,添加节点,节点选择area2D,因为涉及碰撞。
※question:关于碰撞,到底是主动一方还是被动一方?
Timer:可以以节点的形式加入到场景中,倒计时。
one shot:只进行一次倒计时。
auto start:游戏开始时倒计时。
timeout信号:每次倒计时结束时触发。
ec28693f-4471-4533-9435-66a5a87c207b
11,场景作为类型
通过在玩家代码里创建场景变量,来获取子弹场景
var bullet_scene :PackedScene :以文件形式保存在项目里的场景
12,area entered
area碰撞检测
086b3521-319c-48e3-864b-52890764dc33
可以直接把animatedsprite2D拖到代码里
27f0c149-5622-450d-8edf-0396f8d4e2b0
13,UI
破案了,这个框指的是canvaslayer的渲染范围
4ff2a671-8e41-4586-80bf-93d32f406c20
14,窗口
设置跟随窗口大小缩放内容
viewport:游戏物体会强行吸附到每一个像素上(像素风游戏强推)
canvasitem:无上面的特性
ebc72aec-a8bd-493f-bfd2-1096b0fac050
设置导出大小
image
15,导出

posted @ 2025-08-19 17:43  螺丝锥子  阅读(342)  评论(0)    收藏  举报