Godot 官方2D C#重构(2):弹幕躲避
前言
Godot 官方 教程
Godot 2d 官方案例C#重构 专栏
Godot 2d 重构 github地址
实现效果

技术点说明
异步函数
Godot的事件不能在Task中运行,因为会导致跨线程的问题。
//这样是不行的,因为跨线程了,而且会阻塞UI线程,具体原因不知
void Button(){Task.run(()=>{Task.Delay(1000);Label.Text = "Hello Godot";}).Wait();
}//为了实现异步效果,这样子可以
void async void Button(){await Task.Delay(1000);Label.Text = "Hello Godot";
}
但是使用async void 会导致无法捕获到异常抛出,具体情况看一下相关视频
停止在 C# 中使用 async void!改为这样做。
C#异步编程的入门概念及核心理念
信号控制
//设置信号,注意delegate命名是要以EventHandler结尾
[Signal]
public delegate void StartGameEventHandler();//主动触发信号,是去掉后面的EventHandler之后的名称
EmitSignal(SignalName.StartGame);
线段返回随机点位置
使用[Path2d]和[PathFollow2D]组合,批量获取点
如果上下级结构

在Path上面添加点来描述路径



获取路径上的随机点
public PathFollow2D MobPathFollow2D;
//设置随机位置
MobPathFollow2D.Progress = GD.Randi();
这个时候返回的值为
- MobPathFollow2D
- Position:随机点的2D位置
- Rotation:随机点的路径切线方向
Rotation弧度制
Rotation是弧度制的,完整的一周是2π,这个是数学知识。在C#中使用的是Math.PI这个常量。
//方向顺时针旋转90度
MobPathFollow2D.Rotation += Math.PI / 2;
//方向逆时针旋转90度
MobPathFollow2D.Rotation -= Math.PI / 2;
场景化打包
Godot 自带场景化设置,可以将某些节点打包成一个场景,而且可以场景单元测试,可以极大的简化功能和明确每个模块的职责。
场景打包


点开就是一个单独的场景


场景注入
我们有时候需要动态生成敌人。在Godot中,场景就是对节点的打包,我们需要将对应的节点打包成场景,然后实例化使用
//场景注入[Export]public PackedScene MobSence { get; set; }//场景实例化var mob = MobSence.Instantiate<mob>();//设置mob场景参数等等
.....//场景挂载
AddChild(mob);
节点分组通知


触发分组函数事件
//分组名为自定义,函数名可以选择已有的函数
GetTree().CallGroup(分组名,函数名);
//触发分组为mob的清除实例化函数
GetTree().CallGroup("mob",Node.MethodName.QueueFree);
取消RigidBody2D碰撞
通过将marsk取消设置,取消碰撞检测

Layer和Mask如何产生碰撞看如下这篇文章
Godot Engine:PhysicsBody中的Layer和Mask
设置AnimatedSprite2D动画

添加动画,将动画添加分片

public AnimatedSprite2D AnimatedSprite2D;
//获取动画分组名
var mob_animation = AnimatedSprite2D.SpriteFrames.GetAnimationNames();
//选择第index个动画
AnimatedSprite2D.Animation =mob_animation[index] ;
//也可以直接写Animation的名字
AnimatedSprite2D.Animation =“AnimationName”;
//运行
AnimatedSprite2D.Play();
//暂停
AnimatedSprite2D.Stop();
设置起始点
添加Marker2D来设置起始点位置

在_Ready函数中设置位置
public Player Player;
public Marker2D StartPosition;
Player.Position = StartPosition.Position;
节点类型扩张
我们在节点上面添加脚本后。可以用脚本名来获取节点。
- Area2D
- Player
我们可以直接获取Player,因为Player是继承于Area2D的。相当于我们挂载脚本的时候就已经自动扩张了一个类了,非常的方便。
- Player
//在别的地方设置Player脚本
public partial class Player : Area2D
{......
}public Player Player;
Player = GetNode<Player>("Player");
相关文章:
Godot 官方2D C#重构(2):弹幕躲避
前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 实现效果 技术点说明 异步函数 Godot的事件不能在Task中运行,因为会导致跨线程的问题。 //这样是不行的,因为跨线程了,而且会阻塞UI线程,具体原因…...
ELK之LogStash插件grok和geoip的配置使用
本文针对LogStash常用插件grok和geoip的使用进行说明: 一、使用grok输出结构化数据 编辑 first-pipeline.conf 文件,修改为如下内容: input{#stdin{type > stdin}file {# 读取文件的路径path > ["/tmp/access.log"]start_…...
基于Python实现的一款轻量、强大、好用的视频处理软件,可缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕等
Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具,而不是像 Davinci Resolve、Adobe Premiere 那样专业的、复杂的庞然大物。Quick Cut 可以满足普通人一般的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段…...
深入探讨 Golang 中的追加操作
通过实际示例探索 Golang 中的追加操作 简介 在 Golang 编程领域,append 操作是一种多才多艺的工具,使开发人员能够动态扩展切片、数组、文件和字符串。在这篇正式的博客文章中,我们将踏上一段旅程,深入探讨在 Golang 中进行追加…...
三网话费余额查询的API系统 基于thinkphp6.0框架
本套系统是用thinkphp6.0框架开发的,PHP需大于8.2,系统支持用户中心在线查询和通过API接口对接发起查询,用户余额充值是对接usdt接口,源码全开源,支持懂技术的人二次开发~搭建教程1、源码上传后,吧运行目录…...
LeetCode —— dfs和bfs
797. 所有可能的路径 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)。 graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点…...
【ROS 2 基础-常用工具】-7 Rviz仿真机器人
所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客...
循环神经网络(RNN)
定义 循环神经网络(RNN)是一种深度学习神经网络,专门用于处理序列数据,如文本、语音和时间序列数据。RNN的独特之处在于它具有循环连接,允许信息在网络内持续流动,以便处理先前的输入信息,具体…...
ESP32C3 LuatOS TM1650②动态显示累加整数
--注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 PROJECT "ESP32C3_TM1650" VERSION "1.0.0" _G.sys require("sys") local tm1650 require "tm1650"-- 拆分整数,并把最低位数存放在数组最大索引处 loc…...
文心一言 VS 讯飞星火 VS chatgpt (117)-- 算法导论10.3 2题
二、用go语言,对一组同构对象用单数组表示法实现,写出过程ALLOCATE-OBJECT和FREE-OBJECT。 文心一言: 在Go语言中,我们通常使用指针和结构体来表示和操作复杂的数据结构。对于一组同构对象,我们可以使用一个数组来存…...
专业修图软件 Affinity Photo 2 mac中文版编辑功能
Affinity Photo for Mac是应用在MacOS上的专业修图软件,支持多种文件格式,包括psD、PDF、SVG、Eps、TIFF、JPEG等。 Affinity Photo mac提供了许多高级图像编辑功能,如无限制的图层、非破坏性操作、高级的选择工具、高级的调整层、HDR合成、全…...
Excel 5s内导入20w条简单数据(不使用多线程)
文章目录 Excel 5s内导入20w条数据1. 生成20w条数据1.1 使用Excel 宏生成20w条数据1.2 生成成功 2. ExecutorType:批量操作执行器类型2.1 ExecutorType.SIMPLE2.2 ExecutorType.BATCH2.3 ExecutorType.REUSE 3. 20w条数据直接插入数据库3.1 使用ExecutorType.SIMPLE…...
计算机毕业设计 基于SpringBoot笔记记录分享网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
Windows Ubuntu子系统使用USB教程
Windows Ubuntu子系统使用USB教程 Windows Subsystem for Linux (WSL)允许您在Windows上运行Linux。以下指南涉及如何在WSL2中连接和使用USB设备。 WSL版本 在WSL内部运行 uname -a应该显示内核版本为5.10.60.1或更高版本。你需要运行WSL 2发行版本。 USB/IP 客户端工具 在W…...
如何理解TCP/IP协议?
一、是什么 TCP/IP,传输控制协议/网际协议,是指能够在多个不同网络间实现信息传输的协议簇 TCP(传输控制协议) 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP(网际协议) 用于封包交换数据网…...
如何开发出来一款解决抖音本地生活的软件营销工具?
一、智能剪辑、矩阵分发、无人直播、爆款文案于一体独立应用开发 抖去推----主要针对本地生活的----移动端(小程序软件系统,目前是全国源头独立开发),开发功能大拆解分享,功能大拆解: 7大模型剪辑法(数学阶乘&#x…...
GO 语言如何用好变长参数?
函数重载 对于函数重载相信编码过的 xdm 肯定不会陌生,函数重载就是在同一个作用域内定义多个具有相同名称但参数列表不同的函数 此处的参数列表不同,可以是参数的类型不同,参数的个数不同 那么我们一起分别来看看 C 语言,C 语…...
怎么解决 Http 协议无状态?
一、Http 协议无状态的含义 1.1 有状态协议 常见的许多七层协议实际上是有状态的,例如 SMTP 协议,它的第一条消息必须是 HELO,用来握手,在 HELO 发送之前其他任何命令都是不能发送的;接下来一般要进行 AUTH 阶段&#…...
FlinkCDC for mysql to Clickhouse
完整依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-core --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-core</artifactId><version>1.13.0</version>…...
沃通SSL证书服务多省区一体化政务服务平台
近年来,我国政务服务数字化水平不断提升,数字政府建设取得积极成效。依托全国一体化政务服务平台,政务服务效能不断提升,“一网通办”能力显著增强,为创新政府治理、优化营商环境提供了有力支撑。沃通SSL证书具备保护数…...
构建混合特征机器学习流水线:TF-IDF与LLM嵌入的工程实践
1. 项目概述:构建混合特征机器学习流水线在自然语言处理(NLP)领域,特征工程的质量往往直接决定模型性能上限。传统方法如TF-IDF擅长捕捉关键词统计特征,而现代LLM嵌入(如BERT、GPT)则能理解语义…...
机器学习基础:从数据构成到模型评估全解析
1. 机器学习基础概念解析在开始任何机器学习项目之前,我们需要先建立对基础概念的清晰理解。就像建筑师需要先熟悉砖瓦和钢筋的特性一样,数据科学家也必须掌握这些核心术语。1.1 数据的基本构成机器学习算法从数据中学习模式,因此理解数据的组…...
终极指南:如何用CXPatcher一键提升Mac上CrossOver游戏性能
终极指南:如何用CXPatcher一键提升Mac上CrossOver游戏性能 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher 还在为Mac上运行Windows游戏卡顿、闪…...
CUDA 13内存模型重大变更(Unified Virtual Memory默认启用):GPU显存泄漏排查效率下降65%?一文掌握3种LLM训练场景下的精准定位法
更多请点击: https://intelliparadigm.com 第一章:CUDA 13内存模型演进与Unified Virtual Memory本质解析 CUDA 13 对统一虚拟内存(Unified Virtual Memory, UVM)进行了关键性增强,核心在于将 GPU 内存管理从显式分页…...
英语前缀发音总结
第一类:绝大多数普通前缀 对重音的影响:无影响,单词重音仍落在词根上 规律说明:这类前缀不改变词根原有的重音位置。重音通常落在紧接前缀之后的第一个音节(即词根的第一音节)上,前缀本身读作非重读音节,元音常弱化为 /ə/ 或 /ɪ/。 前缀 音标 含义 示例单词 a- /ə…...
深度学习在计算机视觉中的应用与实战指南
1. 深度学习的视觉革命:为什么它如此重要计算机视觉领域在过去十年经历了翻天覆地的变化。还记得2012年AlexNet在ImageNet竞赛中一举击败所有传统算法时的震撼场景吗?那是一个分水岭时刻——深度学习开始展现出处理视觉数据的惊人潜力。如今,…...
大模型API缓存的底层原理:从显存到网关
一、一个直觉引发的思考最近和一位朋友聊到API的缓存,他提出了一个很敏锐的问题:“其实tokens缓存都是假的吧?LLM本身就是无状态的。这种缓存只是一种计费规则。实际上跟上下文显存空间有关,你来用,他那边就会给你开一…...
Rust重构AutoGPT:高性能自主AI智能体框架深度解析
1. 项目概述:当AI学会“自己动手” 最近在GitHub上看到一个挺有意思的项目,叫 kevin-rs/autogpt 。这名字一看就让人联想到去年那个火遍全网的AutoGPT,没错,它正是那个“让AI自己思考、自己执行任务”的明星项目的Rust语言实现…...
终极实战指南:快速解决ComfyUI ControlNet Aux中DWPose预处理器ONNX运行时错误
终极实战指南:快速解决ComfyUI ControlNet Aux中DWPose预处理器ONNX运行时错误 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux ComfyUI Contro…...
C语言指针与Transformer KV Cache内存布局冲突?:资深嵌入式架构师亲授4种零拷贝张量对齐方案
更多请点击: https://intelliparadigm.com 第一章:C语言指针与Transformer KV Cache内存布局冲突的本质剖析 C语言指针的底层语义强调**连续、同质、可偏移的线性地址空间**,而现代大模型推理中KV Cache常采用**分组查询(Grouped…...
