使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人生成器(八)
文章目录
- 开发思路
- 敌人生成器
- 代码分析
- 属性配置
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-滚动背景(四)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人配置(五)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-碰撞框和受伤区域(六)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-受伤 爆炸 销毁组件(七)
开发思路
整体开发还是基于组件的思维。相比于工厂模式或者状态机,可能有些老套,但是更容易理解和编程
教程大概是2个小时 基本上一个小时就能有游戏的雏形。
不过由于都是初学者,所以大概整体是应该4个小时左右。
本篇文章实现敌人在场景中的随机生成,约10分钟
敌人生成器
删除world中已经有的敌人节点,后续敌人都要依赖节点生成器生成了
新建一个node2d场景EnemyGenerator保存

添加两个组件
一个SpawnerComponent生成器组件生成敌人
一个计时器组件,定时生成敌人,定时器名称更改为GreenEnemySpawnTimer

EnemyGenerator新建脚本
ctrl拖动组件生成组件初始化代码
补全声明,新建函数handle_spawn如下所示,设定生成器场景,同时设定生成器坐标,这个目标是让敌人从屏幕上方两侧随机生成
代码如下
添加代码如下所示

代码分析
spawner_component.scene = enemy_scene //敌人生成场景的设置
这行语句是屏幕宽度的设置,可以直接从border_bounce_component组件中复制如下图所示
ProjectSettings.get_setting("display/window/size/viewport_width")

@export var GreenEnemyScene : PackedScenevar margin = 8
GreenEnemyScene 是载入的敌人场景
margin是代表边距,后续需要一个边距为8的向量
spawner_component.spawn(Vector2(randf_range(margin,screen_width-margin),-16))
这行语句就是真正的生成了,生成是一个矢量坐标,矢量坐标是 (x,y) 这样的类型
x轴坐标由随机函数randf_range生成,具体位置就是在边距为8的X轴位置生成。两边都是8
所以一边为8,一边是屏幕最大值-8
y轴坐标是-16,保证敌人在最上方屏幕外面生成,生成时不让玩家看见
属性配置
除此之外,还需要设置敌人生成器场景为绿色敌人。防止没有目标生成

GreenEnemySpawnTimer定时器检查器属性需要设置
1waittime等待时间设置为2s
2 oneshot 设置 启用,做单次触发,为了控制下一次触发事件
3Autostart 设置 启用,做自动触发

后续会将分数和敌人生成频率相关。如果分数增加,那么敌人生成速度会增加。方便提升难度
目前游戏运行,已经可以执行基本的游玩了
下一章制作标题菜单和游戏结束界面
相关文章:
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人生成器(八)
文章目录 开发思路敌人生成器代码分析属性配置 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一) 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二) 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞…...
Allegro中show elements不弹窗问题
今天allegro用的好好的,刚刚还可以正常使用show elements进行对象的详细信息查看的,突然就不好使了,具体表现为不弹窗。 找了好久找到一个类似问题的,具体的解决方法是: D:\Allegro\Cadence\SPB_Data\pcbenv在allegro的…...
【C++】继承最全解析(什么是继承?继承有什么用?)
目录 一、前言 二、什么是继承 ? 💢继承的概念💢 💢继承的定义💢 🥝定义格式 🍇继承权限 三、基类与派生类对象的赋值转换 四、继承的作用域 五、派生类中的默认成员函数 💢…...
STM32-外部中断浅析
本篇解释了STM32中断原理 MCU为什么需要中断 中断,是嵌入式系统中很重要的一个功能,在系统运行过程中,当出现需要立刻处理的情况时,暂停当前任务,转而处理紧急任务,处理完毕后,恢复之前的任务…...
Spring-Data-Elasticsearch
简介 Spring Data for Elasticsearch 是 Spring Data 项目的一部分,该项目旨在为新数据存储提供熟悉且一致的基于 Spring 的编程模型,同时保留特定于存储的特性和功能。 Spring Data Elasticsearch 项目提供了与 Elasticsearch 搜索引擎的集成。Spring…...
代码随想录二刷7.22|977.有序数组的平方
暴力解法: ——如果想暴力解决这个问题的话,可以像题目那样,先将每一个元素平方,然后再排序 双指针: ——从题目中找到的信息:这是一个非递减顺序的整数数组,从例子中,可以容易看…...
redis介绍与布署
redis remote dictionary server(远程字典服务器) 是一个开源的,使用c语言编写的非关系型数据库,支持内存运行并持久化,采用key-value的存储形式。 单进程模型意味着可以在一台服务器上启动多个redis进程,…...
PMON的解读和开发
提示:龙芯2K1000PMON相关记录 文章目录 1 PMON的发展和编译环境PMONPMON2000 2 PMON2000的目录结构3 Targets目录的组成4 PMON编译环境的建立5 PMON2000的框架6 异常向量表7 Pmon的空间分配8 PMON的汇编部分(starto.S或sbdreset.S)的解读Start.SC代码部分dbginit 9 …...
初识c++(构造函数,析构函数,拷贝构造函数,赋值运算符重载)
一、类的默认函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。 #include<iostream> using namespace std; class Date { public:Date(){_year 1;_month 1;_day 1;cout << _year << "/" <&…...
CANoe:为什么两个VLAN接口不能设置同一个网络的IP地址呢?
经常玩CANoe的人应该配置过TCP/IP Stack中网络节点的网卡信息,基本的信息包含:MAC地址、IP地址、子网掩码、默认网关、MTU值、IPv6地址。 如果你想让发送出去的报文携带VLAN tag,可以在网卡上添加VLAN tag信息。 此时你就能得到两个新的网卡V…...
SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目
1,如何打包一个项目 通过IDEA自带的命令行,执行 ./gradlew clean build 2,检查生成的JAR文件 进入 build/libs 目录,你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3:运行生成的JAR文件 你可以在…...
性能测试的流程(企业真实流程详解)(二)
性能测试的流程 1.需求分析以及需求确定(指标值,场景,环境,人员) 一般提出需求的人员有:客户,产品经理,项目组领导等 2.性能测试计划和方案制定 基准测试: 负觋测试: 压力测试: 稳定性测试: 其他:配置测试…...
使用sklearn的基本流程
scikit-learn,通常简称为 sklearn,是一个开源的Python库,是基于 Python 编程语言的一个非常流行的机器学习库。它建立在 NumPy 和 SciPy 这两个科学计算库之上,并与 Matplotlib 配合使用,为数据预处理、模型训练、评估…...
力扣题解(乘积为正数的最长子数组长度)
1567. 乘积为正数的最长子数组长度 已解答 中等 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 本题要求乘积为正数,而整…...
PPTP、L2TP、IPSec、IPS 有什么区别?
随着互联网的发展,保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术,在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议(PPTP)是一种用…...
SpringBoot注解--11--@JSONField @JsonProperty
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一个问题:后端实体类isXXX开头的属性,传到前端后自动去掉is解决方法: JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不…...
C语言 | Leetcode C语言题解之第221题最大正方形
题目: 题解: int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int dp[301][301]{0};int wid0;if(matrixSize0&&matrixColSize[0]0){return 0;}for(int i0;i<matrixSize;i){for(int j0;j<matrixColSize[0];j){if(m…...
AI数据服务如何驱使AI商业化,实现在各行业落地融合
AI技术经历数十载的发展,正在加速向各行各业渗透。近年来深度学习加速了人工智能技术的商业化落地的同时,也带来了大量AI算法训练需求,推动AI数据服务市场的快速增长。作为AI快速发展的“基石”,AI数据服务AI数据服务如何驱使AI在…...
户用光伏项目开发流程
1、收集业主信息 管理业主基本信息,包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡,用于电费结算和划转。 3、合同签约 业主开卡完成之后,平台方发起签约(支持线上签约),…...
C++ 函数返回值是引用类型使用场景
目录 1、希望返回函数内部的局部静态变量或全局变量 2、希望通过函数返回一个对象的成员变量 3、希望实现链式操作 4、避免对象的拷贝 5、需要注意的事项 在C中,函数的返回值可以是引用类型的情况主要有以下几种: 1、希望返回函数内部的局部静态变…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
