网易搬砖选手

网易资深游戏服务器架构设计,分享游戏服务器,客户端,深度学习经验

  • 博客(736)
  • 资源 (92)
  • 收藏
  • 关注

原创 给面试网易游戏的技术一些建议

先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。

2024-09-04 11:43:30 2772

原创 Unity射击游戏开发教程:(36)敌人关卡生成器的设计和开发

枚举是一个变量,它是一组常量。例如,我们可以使用整数来表示指南针的基本方向。0=北1=东2=南3=西这可能很难记住哪个整数代表哪个方向,并且也可能使阅读代码变得有点困难。枚举 Direction 保存表示罗盘方向的特定值子集我们可以声明一个枚举 Direction 并沿我们的基本方向传递:北、东、南、西。所以现在当我们使用枚举 North 时,它实际上表示 0 或 East 表示 1,并且每次我们都会将常量增加 1。但是,我们还没有完成枚举的设置。现在我们需要创建一个枚举类型的变量。

2024-09-18 14:31:49 14

原创 Unity射击游戏开发教程:(35)轰炸敌人

声明变量对于这个动作,我决定尝试一些不同的东西,并使用协程来控制敌人何时改变方向。我们将使用布尔值来记录何时应该向左或向右移动。在update中,我们使用 if else 语句来检查左移布尔值是 true 还是 false。如果为 true,将使用 Vector3.left 将敌人平移向左移动,如果 bool 为 false,我们将使用 Vector3.right。在每个语句中,我们启动一个协程,将 bool 值切换为 true 或 false。协程。

2024-09-12 13:50:47 248

原创 Unity射击游戏开发教程:(34)增加磁铁效果

在这一个小片段中,我们将介绍如何创建一个 Power Up(提升能量地道具),让玩家能够在不移动的情况下吸引其他 Power Up。获取播放器组件每个 Power Up 都有相同的 Power Up 脚本来控制其直线向下移动和碰撞触发。由于每个Power Up都有这个脚本,我们将在这个脚本中控制磁力运动。因此,我们需要掌握播放器,以便我们可以访问其位置和磁铁能量条。在update中,我们需要创建三个始终需要update的变量。第一个是 Vector2,它将保持 Power Up 的位置。

2024-09-10 10:54:55 157

原创 Unity射击游戏开发教程:(34)让敌人有跟随和瞄准地侵略性

一旦满足该条件,我们将实例化激光预制件,将位置设置为火点的位置,并将旋转设置为火点的旋转。请记住,我们计算了卡农的旋转,并且火点是卡农的子级,因此火点的位置和旋转将与卡农的相同。中创建一个名为 Direction 的局部变量,并从玩家的位置中减去敌人的位置(请记住,设定是敌人的子级,因此它将与敌人具有相同的位置)。让我们为这个敌人创建一个脚本,我们需要获取佳能和火点的句柄,因此我们将声明一个游戏对象,序列化它们,并在检查器中分配这些游戏对象。现在,我们的卡农能够随着玩家的移动而向玩家的方向旋转。

2024-09-09 09:30:06 61

原创 揭秘 YOLO 的强大之处:利用 YOLO 系列模型变革物体检测

物体检测广泛应用于自动驾驶、监控和图像分析等应用,因为它能够提供有关场景中物体的存在和位置的详细信息。然后,我们介绍了 YOLO 模型,详细介绍了其独特的架构、优势以及从 YOLOv1 到最新的 YOLOv9 的演变。我们将首先讨论用于物体检测的传统方法,强调它们的局限性及其带来的挑战。最后,我们将详细介绍 YOLOv8 和 YOLOv9 的架构和功能,展示这些模型如何突破实时物体检测的极限。在后续的文章中,我们将探讨 YOLO 模型的具体应用,例如检测人工编写的思维导图中的节点、边和箭头。

2024-09-04 16:34:54 738

原创 为初学者简单易懂地讲解Transformer的基础知识是什么?

例如,它计算句子中的每个单词与其他单词的关系,并使用该信息来理解上下文。Transformer 可以直接建模句子中每个单词与其他单词的关系,使其能够有效地学习单词之间的依赖关系。因为它通过考虑句子的上下文来学习单词表达,所以它的优点是能够生成更自然的句子。Transformer 的注意力机制使其能够高效捕获句子中相距较远的单词之间的关系,其并行计算能力使其能够高速处理大量数据。通过充分利用自注意力机制,Transformer 可以学习句子中每个单词与其他单词的关系,让您对句子有更深入的理解。

2024-09-03 11:05:47 172

原创 Unity射击游戏开发教程:(33)控制飞机左右移动

在此方法中,我们有一个名为horizo​​ntalInput 的变量,它使用左移或右移的Input.GetAxis(水平)返回-1 到1 之间的值。当不向左或向右移动时,该值为 0,当向左移动时,该值增加到 -1,向右移动时,该值增加到 1。这很重要,因为如果该值小于 0,并且移动,我们就知道玩家是否向左移动如果大于 0,则正确。在我使用的动画中,它们只有两帧,因为我们希望飞机倾斜得很快,这样玩家在按下相应按钮时就能直接感觉到转弯。在本文中,我将介绍如何在玩家朝该方向移动时添加向左和向右转动的动画。

2024-08-29 10:15:13 63

原创 Unity射击游戏开发教程:(32)控制子弹射速

显示发射速度从较慢到较快的变化这是一篇关于如何实现射速以防止玩家乱按射击按钮的快速文章。通常做法说到要控制子弹的射速,可以通过以下几种方法:通过设置子弹的发射间隔时间来控制射速。在每次子弹发射后,设置一个时间延迟,确保下一枚子弹不能立即发射。利用计时器来控制发射间隔。可以使用定时器来设置一个固定的时间间隔,在每个时间间隔内发射一枚子弹。根据需求设定射速等级。根据游戏的难度或其他因素,可以设置不同的射速等级,每个等级对应不同的发射间隔时间。根据游戏中的事件触发子弹的发射。

2024-08-26 10:37:50 75

原创 Unity射击游戏开发教程:(31)制造一定追踪行为的敌人

如果为 FALSE,则敌人只能躲避,如果为 TRUE,则敌人只能射击。在本文中,我们将介绍如何在两种敌人行为之间切换。当我们使用 Dodging 方法时,我们将启动一个协程 (StartFiring),它将等待一段时间,然后将 _isFiring 设置为 TRUE。这两个方法会来回反弹,因为这些协程将 _isFiring 变量设置为 ON 和 OFF(TRUE 和 FALSE)。我们需要追踪敌人是否在开火,因为此时我们想要剥夺敌人的闪避能力。这将是一个布尔值,我们将其设置为 FALSE。

2024-08-06 10:28:13 394

原创 golang实现Digest认证鉴权接口

Digest认证鉴权是一种HTTP认证协议,用于验证客户端和服务器之间的身份。它使用了一个特殊的哈希函数来对用户名、密码和其他安全数据进行加密,并生成一个摘要,用于验证客户端的身份。以下是一些Digest认证鉴权的使用场景:Web应用程序:Digest认证鉴权可以用于保护Web应用程序的管理界面或受限资源。用户需要提供正确的用户名和密码才能访问这些资源。API鉴权:Digest认证鉴权可以用于保护API的访问和使用。客户端需要提供正确的密钥和密码才能向API发送请求并获取响应。

2024-08-06 10:26:51 1040

原创 error C2011: “sockaddr_in”:“struct”类型重定义的修改办法

宏的主要作用是减少编译时间和避免命名空间污染。不过你的程序需要使用被排除的API,你则不能定义这个宏,或者需要单独包含那些特定的头文件。简洁的来说,定义以排除加密、DDE、RPC、Shell 和Windows套接字等 API,官方文档在这。#include <cderr.h> // 提供公共对话框错误代码。#include <dde.h> // 动态数据交换(DDE)管理库的定义。#include <ddeml.h> // DDE管理库的高级接口。

2024-07-22 17:01:42 308

原创 Unity射击游戏开发教程:(29)躲避敌人的子弹射击

我们检查激光是否与带有“ShotDetection”标签的游戏​​对象发生碰撞,如果是,我们需要通过创建局部变量并使用 other.GetComponentInParent 来获取 Enemy4 的句柄,因为 Dodge 方法位于脚本中附加到 Enemy 对象而不是子对象。请记住,_isDodging 仅在 0.3 秒内为 true,然后将其设置为 false,从而阻止敌人的移动。在此协程中,我们将 _isDodging 设置为 true,持续 0.3 秒,然后再将其设置为 false,因为……

2024-07-04 14:06:32 439 1

原创 Unity射击游戏开发教程:(30)如何让玩家追踪敌人

因此,我们使用 _direction 全局变量,该变量总是在更新中重新计算,并将其乘以我们的激光速度变量,该变量只是在 OnStart 之前声明的浮点变量。这是我们将使用rotationZ变量的地方,该变量在该变量上方的行中的每一帧中不断地重新计算。我们希望激光的旋转与敌人当前的旋转相匹配,因为我们已经在计算这一点,所以我们只需要告诉敌人最后使用我们之前使用的四元数欧拉进行旋转。现在我们有了玩家的位置,我们可以找出我们需要面对的方向,我们希望它出现在我们的更新中,因为玩家的位置会不断变化。

2024-06-26 17:35:52 190

原创 redis数据库备份,回档,迁移工具使用

相信很多服务器开发者或者运维同学都遇到过这样的场景,比如我要从阿里云的redis集群把数据迁移到另外一个账号下的或者另外一个云服务商的redis集群,或者单机,或者哨兵模式redis实例,那么这种情况下我推荐给大家一款非常好用的工具,可以无缝的从A集群/单机/哨兵/已有的数据库rdb文件 迁移到 B集群/单机/哨兵模式下的实例中。

2024-06-24 00:15:00 168

原创 【go从入门到精通】rpc和grpc的使用

创建我们例子的第一步是定义一个服务:一个 RPC 服务通过参数和返回类型来指定可以远程调用的方法。gRPC 通过protocol buffers来实现。我们使用 protocol buffers 接口定义语言来定义服务方法,用 protocol buffer 来定义参数和返回类型。客户端和服务端均使用服务定义生成的接口代码。这里有我们服务定义的例子,在api/api.proto 里用 protocol buffers IDL 定义的。

2024-06-18 00:15:00 7397 3

原创 【go从入门到精通】网络编程

接下来,我们需要掌握网络编程,TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网际协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。我的意思是,如果我们可以使用特定应用程序(例如 Nginx)的相同 IP: 端口打开一个套接字,我们就可以劫持内核通过该套接字发送给我们的部分请求。包还提供对 UDP 套接字的支持。

2024-06-14 00:15:00 7344 1

原创 微信小游戏推送(小游戏礼包功能)服务器端接入开发经验总结

小游戏开发者的游戏内道具,可通过接入平台「礼包系统」,在微信平台各场景发放游戏礼包。发放场景包括:游戏圈、活动运营工具、发现-游戏-福利中心、广告、搜索等道具礼包发货基于微信小游戏统一的消息推送能力,因此在使用礼包中心的发货回调时,需要开发者服务器处理好消息推送的协议。注意:MP配置消息回调地址只有1个,所有消息推送场景都会使用该通道,所以需要先根据MsgType与Event来判断消息类型,进行相应的处理。下面是发送和返回的格式:更多详情可以查看文档:小游戏礼包 | 微信开放文档。

2024-06-13 11:20:37 15274

原创 Unity射击游戏开发教程:(27)创建带有百分比的状态栏

现在,我们需要一些变量到两个将是需要具有序列化字段属性的 UI,因此我们可以在检查器中分配它们,它们将是一个图像(将是我们的填充图像)和一个文本(这将是我们的弹药)计数文本。需要一个带有 int 参数的公共方法,该参数将作为使用的数量,因此当我们射击或使用推进器时,我们可以从玩家脚本中调用它。我们可以使用状态栏,但我们需要重新填充它,这对于弹药栏和推进器栏来说是不同的,因为推进器栏是再生的。跳转到玩家脚本,因为我们将从那里调用此方法,所以我们需要获取弹药栏的句柄,以便我们可以访问我们创建的方法。

2024-06-12 10:25:30 651

原创 【go从入门到精通】精通并发编程-使用atomic管理状态和同步的无锁技术

Go 中的包sync/atomic提供了低级原子内存操作,确保状态更新以原子方式执行,而不受其他 goroutine 的干扰。在必须以原子方式完成多个进程或需要更复杂类型的同步的情况下,可能需要锁和其他同步技术。在 Go 中,原子计数器允许多个 goroutine 安全地更改共享变量,而无需使用锁或任何其他显式同步,这可确保数据完整性并避免竞争条件。大家从结果上就可以看出这差距不是一点点,当然不是所有的场景都无脑式的使用sync/atomic原子包,那我们接下来看下那些场景不适合。

2024-05-28 15:57:53 694

原创 Unity射击游戏开发教程:(28)敌人被摧毁时掉落的能量提升

然后,我们将通过从生成管理器获取电源数组来实例化电源,并传入随机数,该随机数将确定将创建哪个电源,并在敌人被摧毁的位置创建它,并保持旋转相同使用四元数并将其设置为其身份。例如,百分比机会中的元素 0 = 通电数组中的元素 0(元素 1 = 元素 1,元素 2 = 元素 2,等等)。在 OnTriggerEnter 中,这是敌人被射弹或玩家击中的地方,我们希望在敌人被摧毁之前抓住敌人的当前位置,并将其分配给我们的 powerUpSpawnPosition,这样就知道在哪里可以产生能量我们实例化它。

2024-05-28 15:56:59 251

原创 Unity射击游戏开发教程:(26)创建绕圈跑的效果

角度是我们每帧增加的角度,三角形的斜边(圆的半径)是我们的轨道距离,所以蓝线显示了当前 X 位置添加的内容。当敌人的 Y 位置移动超过停止点(即 2)且 _isMovingDown 为 true 时,我们会将当前的 X 和 Y 坐标存储在相应的变量中,并将 _isMovingDown 设置为 false,这样我们就不再向下移动,这些 X 和 Y 坐标为最终确定。我们创建了一个本地浮点值,它将包含更新时的新 X 位置,并将其设置为等于敌人停止时的 X 位置加上当前角度的 COS x 轨道距离。

2024-05-26 00:30:00 184

原创 Unity射击游戏开发教程:(25)创建具有视差效果的滚动背景

我发现了一些很棒的像素背景,它们是为滚动背景和两者的视差而制作的,因此我能够混合和匹配来制作我的背景。在游戏更新中,我们检查背景图像的位置是否低于该偏移量(背景图像耗尽之前的位置),当低于该偏移量时,我们将其重新定位回起始位置,从而创建无限循环。我们需要找到背景的 Y 位置,即背景耗尽的位置,因此我们抓取父背景图像并将其在 Y 轴上移动,直到背景即将耗尽并记下 Y 位置。我们将创建一个脚本,将背景图像向下移动,然后当它到达 Y 位置时,我们将重新定位回原始位置,以创建这个无尽的滚动背景。

2024-05-25 00:15:00 194

原创 Unity射击游戏开发教程:(24)创造不同的敌人

在这篇文章中,我们将讨论添加一个可以承受多次攻击的新敌人和一些动画来使事情变得栩栩如生。敌人没有任何移动或射击行为。这将有助于增强未来敌人的力量。我们将声明一个 int 来存储敌人可以承受的攻击数量,并将其设置为 3。首先,我们将跳转到 Enemy 脚本并使用 OnTriggerEnter2D 来检测物体何时与 Enemy 发生碰撞。如果标签是激光,我们将在 0.2 秒后摧毁激光,以便在摧毁激光之前给激光击中动画足够的时间播放。接下来,我们将命中计数减 1 并播放敌人命中动画。

2024-05-24 00:15:00 185

原创 【go从入门到精通】精通并发编程-使用扇入扇出提升多个通道之间传递数据的效率

在并发编程领域,Golang 作为一种擅长处理并发的编程语言而脱颖而出。Go 并发模型的一个关键组件是通道,它允许 goroutine 进行通信并同步其工作。在这里,我们将探讨在 Go 中的多个通道之间传递数据的技术。当需要协调不同 goroutine 之间的工作并管理数据流时,这非常有用。了解 Go 通道在我们深入研究在多个通道之间传递数据之前,让我们简要回顾一下 Go 通道是什么以及它们如何工作。大家可以反看我之前的这篇文章:Go 通道是用于 goroutine 之间通信和同步的内置原语。

2024-05-24 00:15:00 176

原创 Unity射击游戏开发教程:(23)Unity 中的跟踪导弹

在我们的游戏更新中,我们需要找到敌人的游戏对象,因此我们可以将其存储在目标变量中。现在我们已经知道了导弹到达敌人的方向,我们希望能够旋转它,使其面向目标。这需要的是当前的 Vector3,它将是transform.up(精灵的顶部),目标 Vector3(存储在我们的方向上,以及希望它在每帧之间移动的距离。如果发生碰撞时标签是“导弹”,我们就知道这是我们的导弹,我们可以输入所有摧毁敌人和导弹的代码。此时,我们有一枚正在工作的跟踪导弹,导弹将向目标旋转并同时向目标移动,但当它击中敌人时,什么也没有发生。

2024-05-23 00:15:00 169

原创 【go从入门到精通】精通并发编程-sync.Map和map

另一方面,如果我们有大量写入工作负载,多个 goroutine 频繁更新数据,我们可能需要使用互斥锁或其他同步机制来确保一次只有一个 goroutine 可以访问数据。提供内置同步,对于读取繁重的工作负载很有用,但它有一些限制,并且比非并发使用的映射慢。通过了解这两种数据结构之间的差异和权衡,我们可以为我们的特定用例选择正确的一种,并优化我们的代码以提高性能和可扩展性。映射是无序键值对的集合,其中键是唯一的,值可以是任何类型。类型是 Go 中的内置类型,它为映射提供了安全且并发的替代方案,并在。

2024-05-23 00:15:00 393

原创 Unity射击游戏开发教程:(22)快速火力提升

一旦玩家开火,我们将开火速率设置为 Time.time 的当前时间加上开火速率,这样它现在必须等待足够的时间才能再次开火。例如,如果玩家在 1 秒开火,则新的开火时间将为 1 + 开火速率,即 0.5。但是,当 Power Up 脚本调用 Rapid Fire Active 方法时,它将将该 bool 设置为 TRUE 并启动等待秒数为 5 秒的协程,这是在 bool 之前玩家可以使用连射的持续时间设置回 FALSE,这会禁用该功能,直到再次收集为止。

2024-05-22 00:15:00 145

原创 【go从入门到精通】精通并发编程-sync.Once

提炼出来的,它使用 `atomic.StoreUint32` 将值设置为 1,表示该函数已被调用,然后使用 `atomic.LoadUint32` 来查看如果需要再次调用。无论有多少个 goroutine 调用它,atomic 包都会以安全的方式执行操作,这使得 `sync.Once` 和 `resync.Once` 是安全的。利用sync.Once,我们确保了只有在第一次调用时生成素数,之后的调用都可以快速获取之前生成好的素数。这样可以避免重复计算相同的素数,提高程序的效率。

2024-05-22 00:15:00 628

原创 【go从入门到精通】精通并发编程-WaitGroup

Go 的 goroutine、通道和互斥体使得开发复杂的并发系统变得很容易。大多数问题都可以使用这三种机制来解决。正如我们前面提到的这篇文章,实际上协程是和很多知识点串起来的 , 并不是孤立的,因此在之前的这篇文章里,我将协程和channel,WaitGroup等知识点进行了综合,这篇文章又拆分来分享给大家。

2024-05-21 00:30:00 465 2

原创 Unity射击游戏开发教程:(21)健康提升

在 Player 脚本中,添加“Increase Health”方法(将其公开,以便我们可以在 Power Up 脚本中调用它),这将处理生命的变化、更新引擎损坏和 UI 管理器。使用 IF ELSE 语句,如果生命值小于最大值 3,我们会将生命值增加 1,其他情况(如果生命值超过 3)我们会将生命值设置回 3,这样就不会超过最大数量。如果我们将 2 条生命移至 3 条生命,我们将关闭左侧引擎的损坏,如果生命从 1 条生命移至 2 条,我们将关闭右侧引擎的损坏。这使伤害动画与生命保持一致。

2024-05-21 00:15:00 215

原创 如何实现比 PyTorch 还要快的置换/转置操作?

与PyTorch相比,在运行时间方面,OneFlow在fp32的情况下至少快3倍,最多可以达到3.2倍。最后一个维度不变,只交换维度1和2,那么我们可以使用更大的访问粒度来读取数据,然后进行Permute操作。以 PyTorch 为例,当数据大小为 128MB 进行 BatchTranspose 时,由于未合并访问内存,实际读取的数据量远大于写入的数据量(7-8 倍)。正如本文和之前关于CUDA优化的文章所示,内核优化有一些常用的方法,例如结合冗余来减少计算次数,调整访问粒度来提高访问效率。

2024-05-20 09:59:22 148

原创 Unity射击游戏开发教程:(20)增加护盾强度

如果它是 2,我们访问 Sprite Render 并将颜色更改为洋红色,如果它是 1,我们将其更改为红色,如果它小于或等于 0,我们关闭 Visualizer 和 Shield Active。因此,如果 ShieldActive 不等于 true,我们会将其设置为 true,设置盾牌强度(决定盾牌可以承受的攻击次数),激活盾牌可视化器并设置盾牌可视化器的颜色。护盾展示器的颜色已经是青色,但由于我们会在受到攻击时更改颜色,因此我们不希望默认为最后一个颜色,因此每次激活时都需要重置。

2024-05-20 09:53:58 123

原创 【go从入门到精通】精通并发编程-Go Mutex 互斥锁

Go 中的互斥锁是什么?编程中的并发性需要保护数据并防止进程之间的冲突。Go 的sync.Mutex 通过控制对共享资源的访问来简化这一过程。在这篇文章中,我们将探索 Go 中的互斥体,了解如何使用它们,并了解它们如何帮助防止冲突。互斥体代表互斥,有助于确保共享内容不被大量 goroutine 同时搞乱。它就像一把钥匙,一次只有一个 goroutine 可以拥有来使用代码的特殊部分。没有它,事情可能会变得混乱并出错。互斥体可以阻止这种情况发生。它们是 Go 标准同步包的一部分。Go 中的互斥锁是什么?

2024-05-17 15:38:46 7685

原创 Unity射击游戏开发教程:(19)控制生命进度条

我们不希望当前的健康状况超过最大健康状况,因此我们使用 If Then 来检查此情况,如果发生这种情况,我们会将当前值设置为最大值。在此游戏对象中,我们将添加到 UI 图像中,这些图像将作为生命值栏的填充和轮廓。回到检查器,我们将脚本附加到健康栏,将填充图像分配给填充变量并将最大值设置为我们想要的值。我们需要初始化的变量是两个整数,分别是生命值“条”的最大值和玩家生命值的当前值。对于每个UI图像,我们只需将之前上传的精灵图像拖到填充图像中,因为它是白色的,所以我们可以将颜色更改为我们想要的任何颜色。

2024-05-17 14:01:55 158

原创 Unity射击游戏开发教程:(18)添加弹药计数+补充弹药

添加简单的弹药计数我将讨论如何向游戏中添加简单的弹药计数。这将包括在 HUD 中添加弹药计数器,当弹药达到 0 时,文本会将颜色更改为红色以提醒玩家。另外,当弹药数为0时,玩家将无法再射击。让我们深入了解吧!在播放器脚本中我们需要添加一些变量。我们将创建两个公共整数,一个是最大弹药,另一个是当前弹药。下一个变量将是一个布尔值,并将跟踪玩家是否有弹药。这将在一开始就设置为 true。在开始时,我们只想确保当前弹药与最大弹药相同。

2024-05-16 00:15:00 9662

原创 【go从入门到精通】精通并发编程-channel

什么是Channel?我们把channel翻译过来叫通道,通道可以被认为是 Goroutine 用来进行通信的管道,可以使用通道从一端发送数据并从另一端接收数据。默认情况下,通信是双向的,这意味着您可以从同一通道发送和接收值,这允许 goroutine 无需显式锁或条件变量即可同步。如果 goroutine 尝试从空通道读取数据,那么它将被阻塞,程序执行将继续等待,直到收到一个值。channel定义Channel可以被定义为全双工、仅传送、仅接收,模式不同。

2024-05-16 00:15:00 8076

原创 Unity射击游戏开发教程:(17)添加推进器推进和推进器推进动画

在当前状态下,当玩家清空 ThrusterBar 时,即使 ThrusterBar 已重新生成,他们也无法再使用 Thruster,因此我需要在 RegenThrusters 协程中添加 ActivateThruster 方法。在 UseThruster 方法中,我们之前使用了 RegenThruster 协程,当调用 UseThruster 方法时,我们需要执行检查以查看 RegenThruster 协程是否正在运行,如果是,我们将停止 RegenThruster 协程,然后再次调用它。

2024-05-15 00:15:00 80

原创 Unity射击游戏开发教程:(15)添加推进器推进和推进器推进动画

现在,当我按住左 Shift 键时,玩家移动得更快,当我释放左 Shift 键时,它会恢复到原始速度。如果 Thrusters(参数)为真,它将从小型推进器转到推进器,如果为假,它将从推进器转换回小型推进器。回到 IF ELSE 状态,如果左 Shift 键按下,我们将提高速度,我们将动画器布尔值设置为 true,以便它触发大推进器动画,当释放左 Shift 键时,布尔值设置为 false 返回动画回到小推进器。当玩家按住 Shift 按钮时,速度会加快,松开 Shift 按钮时,速度会恢复到原来的速度。

2024-05-14 00:15:00 71

原创 【go从入门到精通】使用 pprof 在 Go 中进行分析

当你看到有reflect.unsafe_NewArray的时候,你要小心,这里可能存在一些内存泄露或者不安全的使用方式, 我们可以使用traces reflect.unsafe_NewArray来查看使用的地方都有哪些.越大的盒子总是会对应它的使用情况,无论是CPU、内存等,所以在上面的例子中,我们看到的。通过此基本设置,在运行应用程序时,pprof 将公开您可以与之交互的端点,以开始收集应用程序上的配置文件。命令显示特定函数的配置文件数据摘要,包括其消耗的总 CPU 时间的百分比以及调用的次数。

2024-05-14 00:15:00 371 2

贝叶斯算法ppt课件下载

贝叶斯算法ppt课件

2024-09-18

ACM挑战程序设计竞赛C++习题和代码

项目为《挑战程序设计竞赛(第2版)》习题册攻略,已完结。可配合书籍或笔记,系统学习算法。 题量:约200道,代码注释内含详解。 难度:总体高于Leetcode,部分接近ACM。 内容: 包含:求两数最大公约数和最小公倍数。给出n,求不大于n的素数有多少个,贪心算法,背包问题,DFS+记忆化搜索,最短路径,最优路径,图,穷竭搜索,数论等多种常见的算法题

2024-09-11

Unity射击游戏开发教程的源码

Unity射击游戏开发教程的源码 使用unity开发的一款打飞机游戏,通过移动飞机,发射子弹来击落上方的移动目标飞机,目标飞机有简单的AI逻辑,代码的一些讲解从浅显易懂到不断地深入修改,我配套了相关的代码逻辑讲解博客 https://backend.blog.csdn.net/article/details/136804707 或者大家订阅我的专栏:https://blog.csdn.net/pbymw8iwm/category_7340539.html ,订阅专栏的用户可以后台留言,我免费发给订阅的用户

2024-09-09

PL/0 编译器的扩充-实验报告

# PL/0 编译器的扩充--实验报告 ## 一、实验目的与要求 对PL/0作以下修改扩充: (1)增加单词:保留字 ELSE,FOR,STEP,UNTIL,DO,RETURN 运算符 *=,/=,&,||,! (2)修改单词:不等号# 改为 <> (3)增加条件语句的ELSE子句,要求:写出相关文法,语法描述图,语义描述图。 ## 二、实验环境与工具 1、源语言:PL/0语言,PL/0语言是PASCAL语言的子集,它的编译程序是一个编译解析执行系统,后缀名为.PL0; 2、目标语言:生成文件后缀为*.COD的目标代码 3、实现平台:Borland C++ Builder 6 4、运行平台:Windows 7 64位 ## 三、结构流程 ### (1)PL/0 语言编译器 PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。 ![](jiegou.png) ## 四、实验过程 ### (一)增加单词:保留字 ELSE

2024-09-04

BERT: Pre-training of Deep Bidirectional Transformers forLanguag

BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

2024-09-03

车牌识别算法C++项目源码

一、车牌识别流程 车牌定位-->车牌检测-->车牌字符识别 1.1 车牌定位 车牌定位,即定位到车牌在图片中的位置区域。 本文使用了两种方式:sobel定位和颜色定位,最后综合两种方式实现定位。 1.1.1 sobel定位 sobel定位步骤如下: 高斯模糊 灰度化 Sobel运算 --> 16位转8位 二值化 形态学操作(闭操作)求轮廓 尺寸判断(初步过滤掉不符合要求的矩形)矩形矫正(旋转角度、安全矩形处理、调整大小) 最后得到的是包含可能车牌的旋转后的矩形矩阵向量 1.1.2 颜色定位 RGB颜色空间转换为HSV颜色空间 HSV分离 二值化(V颜色空间) 形态学操作(闭操作) 求轮廓 尺寸判断(初步过滤掉不符合要求的矩形) 矩形矫正(旋转角度、安全矩形处理、调整大小) 最后得到的是包含可能车牌的旋转后的矩形矩阵向量 目录说明 svm_train目录下的是如何进行车牌识别训练的代码,resources/svm_train目录下是车牌识别的训练文件; ann_train目录 下是如何进行字符识别训练的代码,resources/ann_train目录下是字符识别的训练文件

2024-09-03

QT绘制中秋佳节的月亮阴晴圆缺动画

QT绘制中秋佳节的月亮阴晴圆缺动画, C++代码不到一百行代码 月球的变化情况: 月亮从上弦月到下弦月的变化过程涉及月相的顺序变化,这一过程是月球绕地球运动和地球绕太阳运动的结果。月相的变化主要包括以下几个阶段: ‌新月‌:这是月相变化的开始阶段,月球位于地球和太阳之间,地球上看不到月亮。 ‌蛾眉月‌:新月之后,月球开始露出一点亮面,形成蛾眉状的月相。 ‌上弦月‌:蛾眉月之后,月球的亮面逐渐增大,形成上弦月,此时月球的亮面朝西,凸面向东。 ‌满月‌:上弦月之后,月球的亮面继续增大,直到满月,此时月球的亮面全部朝向地球。 ‌亏凸月‌:满月之后,月球的亮面开始逐渐减小,形成亏凸月。 ‌下弦月‌:亏凸月之后,月球的亮面继续减小,形成下弦月,此时亮面朝东,凸面向西。 ‌残月‌:下弦月之后,月球的亮面进一步减小,形成残月。 ‌新月‌:残月之后,月球再次进入新月阶段,开始新一轮的月相变化。

2024-09-03

国庆特惠-世界国家名称及国旗数据

国家数据列表 [country_data, ...] countries_abb2.json 文件 以2位国家缩写为key的国家数据集合 {country_abb2 : country_data, ...} country_data 国家数据 { cn : 国家中文名称, en : 国家英文名称, full: 国家英文全称, abb2: 国家英文2位简称(大写), abb3: 国家英文3位 简称( 大写), code: 国家code数字(字符串) } example: { "cn" : "中国", "en" : "China", "full" : "the People's Republic of China", "abb2" : "CN", "abb3" : "CHN", "code" : "156" } countries_flags 国旗图片文件夹 以国家英文2位简称为图片名的国旗图片,包含全部主流国家,缺少几个小众国家的国旗图片。 图片绝大部分宽640px

2024-09-03

分类不锈钢板中的表面缺陷类型数据集

该数据集来自通信科学研究中心Semeion的研究。研究的最初目的是正确分类不锈钢板中的表面缺陷类型,以及六种可能的缺陷类型(加上“其他”)。 输入向量由27个指示符组成,这些指示符大致[描述]缺陷的几何形状及其轮廓。 根据研究论文,Semion是由Centro Sviluppo Materiali(意大利)委托完成的,因此无法提供有关用作输入向量的27个指标的性质或6类缺陷类型的详细信息。 数据说明 有34个字段。前27个字段描述了从图像中看到的某种钢板断层 X_Minimum X_Maximum Y_Minimum Y_Maximum Pixels_Areas X_Perimeter Y_Perimeter SumofLuminosity MinimumofLuminosity MaximumofLuminosity LengthofConveyer TypeOfSteel_A300 TypeOfSteel_A400 SteelPlateThickness Edges_Index Empty_Index Square_Index OutsideXIndex

2024-09-02

全国热门旅游景点数据集合excel

数据文档 背景描述 全国热门旅游景点数据,用于数据分析、可视化 数据说明 字段:城市、名称、星级、评分、价格、销量、省/市/区、坐标、简介、是否免费、具体地址 字段 数据类型 城市 string 名称 string 星级 string 评分 float 价格 float 销量 int 省/市/区 string 坐标 string 简介 string 是否免费 bool 具体地址 string 数据来源 数据来自:某平台爬取 问题描述 适用于分析: 1、全国景点分布 2、国民出游分析 3、假期出游建议 4、景区价格分析

2024-09-02

Acm 练习题集合 C语言开发

ACM练习题集合 总有些题目是你必须要自己要亲手去实践一遍的,不然的话,再简单的东西,你都是无法掌握的 三天不练手生,作为一个程序员,时刻保持对算法的高度灵敏是至关重要的 习题范围 基础的练习题 ACM的习题 算法入门的题 测试框架 采用GTest的框架【不用Main的原因很简单,不想写那么多的main,main在一个exe模块只有一个】

2024-08-29

Deep Learning From Scratch训练营学习笔记

《Deep Learning From Scratch训练营》 学习笔记 python语言 Softmax-with-Loss层的计算图.md 第1章Python 入门 第2章感知机 第3章神经网络. 第4章神经网络的学习. 第5章误差反向传播法. 第6章与学习相关的技巧. 第7章卷积神经网络. 第8章深度学习.

2024-08-29

2020年度大学生创新创业训练计划项目获推省级项目

2020年度大学生创新创业训练计划项目获推省级项目

2024-08-29

图书馆管理系统C++语言

图书馆管理系统需求 1、图书管理基本业务模拟 书的登记内容包括书号、书名、著作者、现存量和库存量; 建立索引表(线性表)以提高查找效率; a)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; b)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; c)归还:注销对借阅者的登记,改变该书的现存量。 主要功能如下: 输出形式:能按书号、书名、著作者查找库存的书籍信息 能按学生的借书证号显示学生信息和借阅信息 书籍入库 借书功能实现 还书功能实现 设计思想 后端数据处理 利用面向对象思想,实例对象书和学生,对两者附加相关方法和属性,同时使用XML对文件信息进行存储,方法为调用tinystr.h的一个xml读写库。之后将其封装为静态lib库进行接口调用 可视化实现 使用MFC进行窗口编写,实现图书馆可视化。 后端代码 注:首先在官网下载xml文件包,链接:https://sourceforge.net/projects/tinyxml/ 引入自己的库,然后开始实现接口,写好后端接口封装为lib静态库

2024-08-29

朴素贝叶斯机器学习分类器.doc

朴素贝叶斯机器学习分类器.doc

2024-08-26

智能汽车竞赛电路板资料总结

智能汽车竞赛电路板资料总结 电路板的注意事项总结

2024-08-26

大模型训练结果-汽车识别 car.om

大模型训练结果-汽车识别 car.om,识别率在90%以上,可通过threshhold来进一步进行识别率校准判断。

2024-08-26

回合制卡牌战斗游戏服务器架构和业务源码(跨平台,框架和主逻辑C++,登录支付php)

有看不懂代码的可以私聊作者,必回复(代码是作者写的,所以底层框架,主逻辑都明白) 1.回合制卡牌战斗服务器源码,底层库包含常用的工具类,线程库,网络库,数据库操作,主逻辑。 2.服务器架构分为登录支付的web服务器,gateway网关服务器,gameserver游戏逻辑服务器,game server连接mysql数据库,所有的战斗,地图中的任务移动计算都由服务器计算和判断,最后将战斗结果以战报的形式发给客户端来表现。 3.游戏的核心玩法为卡牌收集,九宫格的回合制战斗,包含了装备系统,背包系统,成就系统,排行榜,竞技场,工会,工会战斗,世界boss,活动,签到,任务系统,邮件系统,其他丰富的副本推进玩法,已上线经过验证的项目。 4.单个服务器8G内存,4核CPU的配置可承载两个区,每个区负载六千人同时在线

2024-08-22

基于MindX SDK 开发,使用yolo算法来进行目标检测的python代码

本项目是使用MindX SDK 开发,在arm芯片上进行目标检测,将检测结果保存成json对象并通过redis的发布订阅通道通知给订阅者。 项目主要流程为:通过拉流输入视频,然后进行视频解码将 H.264 格式的视频解码为图片,图片缩放后经过模型推理进行火焰和烟雾,人物,汽车,佩戴安全帽,异物检测,空载检测,识别结果经过后处理后利用 cv 可视化识别框,如果检测到烟雾和火灾进行告警。 样例配套的 CANN 版本为 [5.0.4] ,MindX SDK 版本为mxVision-5.0.1。 MindX SDK 安装前准备可参考《用户指南》 (https://gitee.com/ascend/mindxsdk-referenceapps/blob/master/docs/quickStart/1-1安装SDK开发套件 工程目录如下图所示: ``` ├── envs │   └── env.sh //基础环境变量 ├── images //ReadMe图片资源 │   └── image-flow.png ├

2024-08-19

K-means聚类算法

K-means:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类的理论知识包括什么是聚类、聚类的应用、聚类思想、聚类优缺点等等;然后通过k-均值聚类案例实现及其可视化有一个直观的感受,针对算法模型进行分析和结果优化提出了二分k-means算法。最后我们调用机器学习库函数,很短的代码完成聚类算法。

2024-08-19

mxVision-5.0.1打包下载,华为服务器arm环境

mxVision-5.0.1打包下载,华为服务器arm环境 bin/ config/ filelist.txt include/ lib/ opensource/ operators/ python/ samples/ set_env.sh* toolkit/

2024-08-16

yolov8的入门级(训练+预测)的代码demo

yolov8的入门级(训练+预测)的代码demo(目标检测/实例分割/关键点检测........) 1.install 安装torch+torchvision,torch官网有可选配置的安装指令提供,以及Previous versions提供https://pytorch.org/ 安装ultralytics pip install ultralytics 安装习惯的图像处理安装包处理result pip install 。。。。。 2.数据集标注 工具:labelme pip install labelme 2.训练(train.py) 三种任务的训练代码都非常简单。 首先都是载入模型,yolov8+n/s/m/l/x 是不同级别的目标检测预训练模型,后面+‘-seg’是实例分割模型,后面+‘-pose’是关键点检测模型,因为后两者都是基于目标检测的所以都会自动先加载目标检测模型。 3.预测(predict.py) from ultralytics import YOLO # Load a model model = YOLO('yolov8n.pt') # load an o

2024-08-14

神经网络学习资料整理从入门到精通

基础教程 实践案例 实践项目 内容 1.Python与基础知识 2.神经网络基本原理 3.神经网络高级模型 4.经典机器学习算法 5.现代软件工程 6.人工智能系统 自然语言理解 快速构建中文文本蕴含深度学习模型 智能对联 计算机视觉 看图识熊 漫画翻译 手写数字识别 语音 文本朗读应用 决策 黄金点游戏

2024-08-14

golang开发使用mongodb统计数据并输出到excel中

本代码使用的是mongodb从指定的数据库中分页查找数据,并自定义excel表格的格式,根据需要输出的格式将结果按照列来更新

2024-08-12

海康ISAPI开发指南-音频产品-广播音频输出

海康ISAPI开发指南_音频产品_广播音频输出 海康的SDK 对于部分系统架构支持不是特别好,比如音柱声音告警的功能,他在arm架构下不支持,这个也是官方给我的回复,因此我选择使用ISAPI来开发,通过调用http访问接口来完成对SDK的调用

2024-08-12

rollercoaster-dataset过山车数据集下载

过山车数据库 该数据包含有关 1000 多个过山车的信息。信息是从维基百科抓取的。 数据集是csv格式的,包含过山车名称 长度 过山车的长度(英尺或米)(原始文本) 速度 速度(英里/小时或公里/小时)(原始文本) 地点 过山车的位置或停放地点 地位 过山车运行状况 开幕日期 杯垫的启用日期(原始文本) 类型 杯垫的材质类型 制造商 杯垫制造商 身高限制 乘坐身高限制 模型 杯垫模型

2024-08-09

海康音柱服务调用C++工程

使用C++开发,直接使用的是ISAPI调用来根据不同的告警类型播放不同的告警音乐,其中告警类型和对应的音乐名称是走配置的,而且音乐文件是提前通过音柱网页端后台上传好的,代码里会根据当前的告警类型和音柱客户端将告警音乐播放。 跨平台开发,支持linux,windows平台,http服务负责接收http客户端的告警请求,收到告警请求之后放到子线程队列中排队,子线程依次将告警音乐进行播放。

2024-08-05

育龄人群备孕胎次与避孕方式数据集

.育龄人群备孕胎次与避孕方式数据集.国家人口健康科学数据中心数据仓储PHDA, 育龄人群备孕胎次与避孕方式数据集收集了2010年-2014年31个省、直辖市、自治区及新疆建设兵团的备孕夫妇胎次与采用避孕方式的信息。数据资料包括基础人口学信息、孕产史信息、避孕方式、避孕措施持续使用时间及目前是否停用的信息等。本数据集可用于头胎备孕人群及二胎及以上胎次备孕人群的避孕方式横断面调査分析以及我国青龄人口避孕方式构成情况的时间变化趋势分析等。 育龄人群备孕胎次与避孕方式数据集

2024-07-25

糖尿病并发症预警数据集

糖尿病并发症预警数据集 糖尿病是一种代谢紊乱性疾病,其发病率已在全球呈持续上升的趋势。和心脑血管疾病等其他慢性非传染病一样,I型糖尿病是种多因素疾病,其危险因素包括遗传、社会、生活方式和环境等多方面。预防控制糖尿病的关键是采取综合的预防治疗措施,而评估疾病的危害程度和控制疾病的危险因素则是糖尿病防治的重要前提。因此,掌握尿病患病和死亡情况,了解其危险因素的分布及其规律,可以为采取预防和控制糖尿病发生发展、提高尿病患者生存质量的措施提供决策依据。 本数据兼容性良好,基础表格处理软件便可运行。具体数据挖掘工具依据用户需要而定 中国人民解放军总医院提供

2024-07-25

海康相机算法检测SDK的C++开发项目源码

本源码是商业化的源码,源码使用C++调用海康的SDK(支持跨平台的,本项目中包含了Win64和arm环境的SDK,如果需要支持其他系统的SDK,也可以支持,直接从官网下载对应系统版本的库,放到thirdparty\sdk目录下,有疑问无条件支持集成),源码中包含了自动解析相机的rtsp流地址(或者你自己配置相机登陆用户名和密码,host,端口),登陆相机之后,封装了调用接口API的方法,实现了获取相机能力,修改相机算法参数的功能,实现了火点检测和告警,温度检测和告警的逻辑。 本源码在开发使用中基本上就直接可以套用,在使用过程中有任何崩溃或者bug,都可以联系我,我将无偿修复解决。

2024-07-22

yolov5的人脸检测工具C++开发

yolov5的人脸检测工具C++开发

2024-06-25

【go从入门到精通】rpc和grpc的使用-客户端代码

【go从入门到精通】rpc和grpc的使用

2024-06-17

一个简单的grpc开发demo

一个简单的grpc开发demo

2024-06-17

docker配置和安装使用说明

docker配置和安装使用说明 1、docker安装与启动 2、镜像的获取与容器的使用 3、持久化容器与镜像 4.一些使用技巧

2024-06-17

aarch64-linux-gnu环境opencv4.5.5交叉编译库

opencv4.5.5交叉编译库 aarch64-linux-gnu环境,该压缩包包含了头文件和动态库,其中动态库包含软连接,对于开发者而言,可以直接引入即可,不需要再花费时间编译了。

2024-06-06

opencv跨平台编译库

本压缩包使用的是opencv4.5.5编译的,交叉编译环境为aarch64-gnu.toolchain 使用的编译器版本为:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu 最后生成的是一个so库和include头文件,压缩包解压后保存软连接

2024-05-31

反光衣检测识别yolo模型

反光衣检测识别yolo模型

2024-05-21

yolo车辆识别检测模型

yolo车辆识别检测模型 car.bmodel 通过yolo训练得到的模型文件

2024-05-21

使Unity开发的游戏支持热更新的解决方案

JEngine 是专为 Unity 开发人员设计的开箱即用框架。它封装了强大的功能。初学者也可以快速上手,轻松创建可在运行时更新的游戏。 该master分支是开发者认为可以正常使用的最新版本,不会有太多问题。推荐使用,功能最强大(同时修复了旧版本的bug); 该0.7.x分支目前被大多数商业项目使用,它是2022年最受欢迎的版本,具有各种有用和高性能的功能,该分支将不再更新或维护(该分支有完整的文档,但官方教程视频很少); 该0.6.x分支已被大多数商业项目使用,内容完整,文档和视频充足,不会再更新或维护; 该0.5.x分支正在被一些商业项目使用,不会更新或维护; 依赖关系 ILRuntime v2.1.0 - 在运行时执行 C# 代码 YooAssets v1.4.10 - 在运行时更新资源 Unity-Reorderable-List v1.0.1 - 附加编辑器检查器工具

2024-05-15

2048微信小游戏代码下载

该程序主要难度在用户滑动屏幕时值相同的cell合并 将空格标为0(我代码中是用的""表示空格),假设棋盘如下: - 0 2 0 2 - 0 0 0 0 - 0 0 0 2 - 0 0 0 0 ### 步骤 - 通过touch相关的事件函数确定用户滑动方向 - 将棋盘的数字生成4*4的二维数组list - 根据用户滑动方向生成四个小数组,比如用户将上面的棋盘向右滑动,则四个数组为: > item[0] = [2, 0, 2, 0]; > item[1] = [0, 0, 0, 0]; >item[2] = [2, 0, 0, 0]; // 注意是2000而不是0002,因为是向右滑动要从右边开始 > item[3] = [0, 0, 0, 0]; - 接下来就是滑动时合并,拿item[0]举例,如果是2020,向右滑动我们应该成为0004 >- 将item[0]的所有0移到末尾变为2200,遍历item将相同的下标值相加,后面的数置为0 >- 2020 ---> 2200 ---> 4200 ----> 4000 - 如法炮制就可以实现滑动时合并

2024-05-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除