使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)

概要

飞船设计游戏的学习,如下所示
在这里插入图片描述

原视频地址:
https://www.youtube.com/playlist?list=PL9FzW-m48fn09w6j8NowI_pSBVcsb3V78

b站中文配音
https://www.bilibili.com/video/BV1sr421j7dV/?spm_id_from=333.999.0.0&vd_source=093c283a6af7eab1ce3b03cc6fc1a71a

以下是使用的资源在本教程系列中:
https://github.com/uheartbeast/galaxy_defiance_resources/tree/main

这是该系列的 github 存储库:
https://github.com/uheartbeast/Galaxy-Defiance

开发思路

整体开发还是基于组件的思维。相比于工厂模式或者状态机,可能有些老套,但是更容易理解和编程

教程大概是2个小时 基本上一个小时就能有游戏的雏形。

不过由于都是初学者,所以大概整体是应该4个小时左右。

本篇文章实现约15分钟

界面编辑

新建工程,设置界面大小

新建一个工程,点击菜单中项目 下拉菜单选择项目设置 打开 窗口,选择显示窗口
在这里插入图片描述
视口宽度和高度设置为160 240,这是可视窗口大小
在这里插入图片描述
需要选择右上角 打开高级设置,设置窗口宽度和高度覆盖为 640 960
为渲染窗口,强制游戏窗口使用特定的分辨率
在这里插入图片描述
拉伸选择canvas_items
在这里插入图片描述
窗口如同所示,蓝色线为可视范围,你可以
在这里插入图片描述
由于素材都是像素风格,因此同样,修改项目设置-纹理-画布效果-默认纹理过滤为 Nearest
你只要使用像素风格,必须就使用这个Nearest,线性过滤会使得像素模糊
“Nearest” 过滤方法直接选择最接近的像素颜色,不进行插值计算,这样可以避免模糊和混色效果,保持原始的像素色块。
在这里插入图片描述

导入素材

下载素材,我之前给出的
https://github.com/uheartbeast/galaxy_defiance_resources/tree/main
或者csdn下载也可以
https://download.csdn.net/download/watch361/89517849

解压后直接拖入文件系统,你复制也可以。
在这里插入图片描述

场景编辑

新建一个2D节点场景,名字为world,为我们的主世界,如果你认为这一步困难,请退出看我的另一篇文章,如何做你的第一个2d游戏
在这里插入图片描述

场景编辑

新建一个2D节点场景,名字为world,为我们的主世界,如果你认为这一步困难,请退出看我的另一篇文章,如何做你的第一个2d游戏
在这里插入图片描述
再新建一个场景2d ,作为ship2d保存,节点下面添加AnimatedSprite2D用于实现飞船的动画实现
如果这一步你认为很困难,那么同样应该参考我的另一篇文章,如何做你的第一个2d游戏
在这里插入图片描述
点击检查器重spriteframes,在下方动画帧中添加三个动画 center bank_left bank_right

center动画添加为飞船,水平为3 垂直为1 分割为三帧
在这里插入图片描述

使用复制帧,将三个帧动画分辨复制到对应动画中center bank_left bank_right
在这里插入图片描述
将自动加载动画选择为中心,这样默认加载就是正常飞船了
在这里插入图片描述
将飞船放在world中,直接拖进去或者点击左上角实列化子场景都可以
在这里插入图片描述
将飞船设置在底部,检查器中transform 位置设置为80 216
这样就能将飞船设置为底部中心位置
在这里插入图片描述

移动组件

这个教程是按照组件模式构建系统,因此开始制作飞船移动的组件

新建一个脚本move_component.gd在components下,作为飞船的移动元素

在这里插入图片描述
代码如下所示

代码分析
实际上就是新建一个移动类,所有的移动物品都可以调用这个脚本移动,方便复用代码。
translate是偏移量函数,他的参数需要时一个速度适量
velocity是速度,delta是一帧时间
这样相乘能够保持运动刷新正常且平滑

在这里插入图片描述

class_name MoveComponent
extends Node

@export var acter: Node2D
@export var velocity :Vector2

func _process(delta):
	acter.translate(velocity*delta)

然后将这个组件添加到ship节点下,并且指定acter 并且设置x速度为50
在这里插入图片描述
运行,可以看到飞船从左向右移动,因为速度给了50,代表这个组件构建添加成功
将速度改回0 然后准备新建输入节点

输入组件

同样新建move_input_component.gd
在这里插入图片描述
程序代码如下
代码重点分析
一样新建一个类
move_component设置之只能选择MoveComponent的类
input_axis 是输入方向 左侧-1 右侧为1
move_component.velocity是移动的速度矢量,一样分为x和y

class_name MoveInputComponent
extends Node

@export var move_component: MoveComponent

func _input(event: InputEvent) -> void:
	var input_axis = Input.get_axis("ui_left", "ui_right")
	move_component.velocity = Vector2(input_axis*50 , 0)

在这里插入图片描述
将节点同样添加在ship下面
在这里插入图片描述
同样要在检查器中,选择组件为movecomponent
在这里插入图片描述
运行后,使用左右方向键能够控制飞机运行,代表这个输入组件添加成功

添加移动状态脚本

添加move_stats这个节点,需要继承于resouce
在这里插入图片描述
同样,代码如下,设置具体速度值

class_name MoveStats
extends Resource

@export var speed: int = 100

并且MoveInputComponent需要修改,将MoveStats状态导入进去

class_name MoveInputComponent
extends Node

@export var move_stats: MoveStats
@export var move_component: MoveComponent

func _input(event: InputEvent) -> void:
	var input_axis = Input.get_axis("ui_left", "ui_right")
	move_component.velocity = Vector2(input_axis * move_stats.speed, 0)

新建资源,继承move_stats 名称为ship_move_stats.tres
在这里插入图片描述
然后就可以在检查其中选择这个资源,速度就和这个相关了
在这里插入图片描述

定位组件

组件功能是保证飞船不超出窗口。使用已经编写好的组件PositionClampComponent
在这里插入图片描述
检查器选择为ship
在这里插入图片描述
再运行,飞船移动就不能超出边界,那么组件添加成功

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,以下是一个简单的使用Godot的Viewport组件的示例: 1. 创建一个新场景,并添加一个Viewport节点。 2. 在Viewport节点下添加一个Sprite节点,用于显示图像。 3. 打开Sprite节点的“Texture”属性,选择一个图像文件作为纹理。 4. 将Viewport节点的“Size”属性设置为与Sprite节点的纹理大小相同。 5. 将Viewport节点的“Render Target”属性设置为“On”。 6. 在场景中添加一个Camera2D节点,并将其位置设置为查看Sprite节点的位置。 7. 将Camera2D节点的“Current”属性设置为Viewport节点。 8. 运行场景,应该可以看到Sprite节点的图像在Viewport中显示。 这个示例演示了如何使用Viewport组件来创建一个简单的可视化效果,并使用Camera2D节点来控制视图。你也可以在Viewport中添加其他节点,例如UI元素或其他图形对象,以创建更复杂的可视化效果。 ### 回答2: Viewport组件在Godot游戏引擎中扮演着非常重要的角色,它可以用来控制显示区域和摄像机视角。这里我们以一个2D平台游戏为例来演示Viewport组件使用。 首先,在Godot游戏引擎中创建一个新的项目,并创建一个场景。然后,在场景中创建一个Viewport节点作为根节点,并将其命名为"ViewportNode"。 接下来,创建一个Sprite节点作为场景的子节点,并将其命名为"PlayerNode"。给它一个适当的纹理,并在场景中设置它的位置。 然后,在Viewport节点的属性面板中,找到"Viewport/Attach to Node"选项,并将其设置为"PlayerNode",这样Viewport将跟随玩家角色节点。 接着,在Viewport节点的属性面板中,找到"Viewport/Size"选项,并根据游戏的需求设置大小。你可以手动设置大小,或者选择一个适当的屏幕分辨率。 随后,在Viewport节点的属性面板中,找到"Viewport/Current"选项,并勾选上它。这将启用Viewport节点的渲染,使其能够显示玩家角色节点。 最后,在场景中添加其他需要显示的节点,比如敌人、障碍物等等,并在脚本中实现规则和逻辑。 在游戏运行时,Viewport将会根据你设置的大小和位置,将游戏的内容显示在屏幕上。玩家角色节点将一直处于Viewport的可视范围内,同时视角也会随着角色的移动而改变。 以上就是一个基本的Viewport组件使用案例。当然,你可以根据实际需求对Viewport进行更复杂的配置,比如添加摄像机节点、设置投影方式等等。希望对你有帮助! ### 回答3: 当然可以!以下是一个使用Godot引擎中Viewport组件的示例: 首先,在Godot引擎中创建一个新场景。在场景中添加一个Viewport组件,并将其命名为"MainViewport"。Viewport组件可以用于在不同的分层和视角下呈现场景。 接下来,添加一个2D节点作为Viewport的子节点,并将其命名为"Player"。在Player节点上添加一个Sprite节点,用作玩家的形象。 然后,在Viewport组件中设置相关属性。将Viewport的Size属性设置为所需的视图大小(例如800x600像素)。 在场景中添加一个Camera2D节点,并将其作为Player节点的父节点。确保Player节点位于Camera2D节点的正中心。 然后,在Camera2D节点上设置相关属性。将Camera2D的Current属性设置为"true",表示当前视角为操作视角。将Camera2D的Drag Margin属性设置为合适的值,以便在玩家移向视图边缘时自动滚动。 接下来,创建脚本文件并将其附加到Player节点上。在脚本中,添加一个变量来控制玩家节点的移动速度。例如,可以添加一个名为"speed"的浮点型变量,并将其初始值设置为5.0。 在脚本中,添加一个函数来处理键盘输入并移动玩家节点。在函数中,使用Input类获取键盘输入的方向。根据按键的方向,更新玩家节点的位置。例如,如果按下上方向键,则玩家节点向上移动。更新位置后,使用Viewport类的"set_offset()"函数将Camera2D节点的位置设置为玩家节点的位置。 最后,在场景中添加一些2D节点,以提供玩家与环境的交互。例如,可以添加墙壁或其他障碍物。使用碰撞检测功能来检测玩家与其他节点之间的碰撞,并在需要时采取适当的行动。 通过这个案例,你可以了解如何使用Godot引擎的Viewport组件来创建一个视图窗口,并控制玩家节点在视图中移动。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超级馒头神

看看谁给我第一个打赏。太感谢您

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

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

打赏作者

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

抵扣说明:

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

余额充值