使用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 :Vector2func _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: MoveComponentfunc _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: MoveComponentfunc _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
在这里插入图片描述
再运行,飞船移动就不能超出边界,那么组件添加成功

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

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

相关文章

go语言day09 通道 协程的死锁

Go语言学习——channel的死锁其实没那么复杂 - JackieZheng - 博客园 (cnblogs.com) 目录 通道 创建通道 1)无缓冲通道 2)有缓冲通道 通道的使用 1) 值从通道入口进 2) 值从通道出口出 信道死锁: 0)死锁现场0 1)死…

# [0701] Task05 策略梯度、Actor-critic 算法

easy-rl PDF版本 笔记整理 P4、P9 joyrl 比对 补充 P9 - P10 相关 代码 整理 最新版PDF下载 地址:https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用): 链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us…

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域,以下是其中几个最新的应用: 1、自动驾驶汽车:自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化,帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

GUKE万能工具箱(附带源码)

GUKE万能工具箱&#xff08;附带源码&#xff09; 效果图部分源码领取完整源码下期更新 效果图 部分源码 <!DOCTYPE html> <html><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1"…

哏号分治,CF103D - Time to Raid Cowavans

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 103D - Time to Raid Cowavans 二、解题报告 1、思路分析 想了半天数据结构最终选择根号分治 我们考虑 大于 550 的公差直接暴力 小于550 的公差的所有询问&#xff0c;我们直接计算该公差后缀和&#xf…

strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用 strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中&#xff0c;遇到空字符 **b’x\00’**时停止&#xff0c;&#xff1a; 所以可以利用 strcpy不检查缓冲区 的漏洞&#xff08;构造的字符串要以\0结尾&#xff09;&#xff0c;…

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…

C++(第五天----多继承、虚继承、虚函数、虚表)

一、继承对象的内存空间 构造函数调用顺序&#xff0c;先调用父类&#xff0c;再调用子类 #include<iostream>using namespace std;//基类 父类 class Base{ public: //公有权限 类的外部 类的内部 Base(){cout<<"Base()"<<endl;}Base(int …

ANN文献综述

人工神经网络文献综述 摘要 人工神经网络&#xff08;Artificial Neural Networks, ANNs&#xff09;是由多个简单的、相互连接的处理单元组成的自适应系统&#xff0c;通过调整这些单元之间的连接强度&#xff0c;ANNs能够实现对复杂数据的建模和预测。本文综述了ANNs的基本…

el-input-number 点击加减只能加一次

el-input-number 点击加减只能加一次 <el-input-number v-model"editForm.quantity" placeholder"请输入下单数量(店均)" change"quantityChangeFn"></el-input-number>需要在方法里面加 this.$forceUpdate() quantityChangeFn(val…

oracle用户过期/设置无限期用户/ORA-28001:the password has expired

oracle默认情况下&#xff0c;新建的账户只有180天的有效期&#xff0c;在有效期到期前一周就会报警。而一旦过了有效期&#xff0c;账户就会被锁定无法登录。所以为了方便起见&#xff0c;要修改oracle用户的有效期为无限。 1.查看用户密码的有效期设置&#xff0c;一般默认的…

【ABB】控制器语言切换

【ABB】控制器语言切换 操作流程演示 操作流程 点击【菜单】点击【Control Panel】点击【Language】点击【Chinese】点击【OK】此时会弹出弹窗&#xff0c;点击【YES】此时控制器会重启&#xff0c;重启完成就是中文了 演示 点击【菜单】 点击【Control Panel】 点击【Langua…

【hive】数据采样

参考https://hadoopsters.com/how-random-sampling-in-hive-works-and-how-to-use-it-7cdb975aa8e2&#xff0c;可以直接查看原文&#xff0c;下面只是对原文进行概括和实际性能测试。 1.distribute by sort by2.测试3.map端数据过滤优化采样 在说数据采样之前&#xff0c;需要…

贪吃蛇——C语言(VS2022含源代码,及源代码zip文件)

一.游戏背景 贪吃蛇是一款在世界上盛名已久的小游戏&#xff0c;贪食蛇游戏操作简单&#xff0c;可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候&#xff0c;而是开始。那个时候蛇身很短&#xff0c;看上去难度不大&#xff0c;却最容易死掉&#xff0c;因为把玩一条小…

Streaming local LLM with FastAPI, Llama.cpp and Langchain

题意&#xff1a; 使用FastAPI、Llama.cpp和Langchain流式传输本地大型语言模型 问题背景&#xff1a; I have setup FastAPI with Llama.cpp and Langchain. Now I want to enable streaming in the FastAPI responses. Streaming works with Llama.cpp in my terminal, but…

首个“可控”人物视频生成大模型--商汤Vimi:一张照片生成一分钟视频

商汤科技又整大活了&#xff0c;只需一张照片就能生成一分钟视频&#xff01; 7月4日&#xff0c;商汤发布了业内首个面向C端用户的、“可控”人物视频生成大模型产品Vimi&#xff0c;毫不夸张的说&#xff0c;视频制作者的福音来了&#xff01; Vimi有什么特别之处&#xff1…

在postman中调试supabase的API接口

文章目录 在supabase中获取API地址和key知道它的restfull风格在postman中进行的设置1、get请求调试2、post新增用户调试3、使用patch更新数据&#xff0c;不用put&#xff01;4、delete删除数据 总结 在supabase中获取API地址和key 首先登录dashboard后台&#xff0c;首页- 右…

特征缩放介绍

目录 一、引入特征缩放&#xff1a;二、特征缩放介绍&#xff1a;三、如何实现特征缩放&#xff1a;1.分别除特征中最大值缩放到0—1&#xff1a;2.均值归一化缩放到-1—1&#xff1a;3.Z-Score归一化&#xff1a; 四、特征缩放合理范围&#xff1a; 一、引入特征缩放&#xff…

Zabbix 配置 VMware 监控

Zabbix监控VMware 官方文档&#xff1a;https://www.zabbix.com/documentation/current/en/manual/vm_monitoring Zabbix 可以使用低级发现规则自动发现 VMware 虚拟机管理程序和虚拟机&#xff0c;并根据预定义的主机原型创建主机来监控它们。Zabbix 还包括用于监控 VMware …

精准调整:数控切割机导轨的水平与垂直度校准!

滚柱导轨因其具有高承载、高精度、高稳定性和长寿命等特点&#xff0c;被广泛应用在重型设备、精密设备、自动化生产线、航空航天和半导体设备等领域。尤其是在数控切割机中的应用&#xff0c;最为广泛。 对于数控切割机来说&#xff0c;滚柱导轨的调整非常重要&#xff0c;是数…