- 博客(81)
- 收藏
- 关注

翻译 VSCode官方文档-中文翻译-C/C++环境配置与运行、调试
大多数情况下,推荐的目录是可以接受的。:当你保存或打开一个C++文件时,你可能会收到来自C/C++扩展的通知,通知你有一个Insiders版本可用,该版本可以让你测试新功能和修复。语句的某处放置插入点(译者水智注:插入点指的是闪烁的光标活跃位置,即输入文本时所处的活跃点,更通俗的讲,就是那个一闪一闪的竖线),然后按。在这种情况下,出现错误是预料之中的,因为尽管循环变量名现在对调试器可见,但该语句尚未执行,所以在这一点上没有任何内容可读。记住,C++扩展使用你在计算机上安装的C++编译器来构建你的程序。
2023-10-13 15:24:05
2574

翻译 Unity多人游戏开发-Netcode for GameObject-官方文档中文翻译
Netcode具有自定义生成处理程序,用于替代UNet的自定义生成函数。请查看对象池以获取更多信息。在如今的多人游戏中,对象transform(变换)的同步是最常见的网络编码任务之一。确定你希望同步的transform轴序列化这些值将序列化的值作为消息发送给所有其他已连接客户端处理消息并反序列化这些值将这些值应用到相应的轴上乍一看,上述高级概述的任务似乎相对简单,但当你开始逐项实现时,几乎任何资深网络编码软件工程师都会认同:这一过程很快就会变得复杂起来。
2023-08-19 22:14:14
8709

原创 【Unity2022】Unity多人游戏开发教程-Netcode for GameObjects-使用命令行启动多人游戏
Windows10以前的多人游戏开发,有些项目或者教程可能使用的是UNet,当然也有别的方案,但是UNet已经被Unity官方弃用了,也就是说UNet是一个过时的方案,目前正在开发一种新的多人游戏和网络解决方案,名字叫做Netcode for GameObjects。本篇文章的多人游戏解决方案采用的就是Netcode for GameObjects。
2023-07-15 17:17:25
5629
原创 Kotlin 循环语句详解
在讲解for-in前,先了解一下区间。区间是一种表示一系列连续值的数据结构,包括整数区间等,可以方便地用于循环遍历。下面详细介绍几种常见的区间类型及其在 for-in 循环中的使用方法。整数区间是最常用的区间类型,用于表示一系列连续的整数。循环,它们用于重复执行某段代码,直到满足特定条件为止,下面分别进行讲解。这个示例中,程序会先提示用户输入,然后检查输入是否为。如果需要反向遍历,可以使用 downTo 关键字。如果需要同时获取元素及其索引,可以使用。,如果不是则继续循环,直到用户输入。
2025-01-13 21:29:44
918
原创 Kotlin 快速上手指南:从安装 IntelliJ IDEA 到编写第一个程序
Kotlin 是一种现代的、简洁的、安全的编程语言,运行在 Java 虚拟机上。使用 fun 关键字定义函数。return "你好,namereturn "你好, $ name!" }使用 class 关键字定义类。
2025-01-13 16:54:51
1967
原创 C#泛型中的default关键字:为值类型与引用类型赋予默认值
在C#中,default关键字用于指定泛型类型参数的默认值。这个值通常是该类型的零值。
2025-01-05 12:03:22
891
原创 实现自定义集合类:深入理解C#中的IEnumerable<T>接口
在C#中,是一个泛型接口,用于表示可以被枚举的集合。它定义了用于遍历集合中元素的方法和属性。是的泛型版本,提供了类型安全的枚举功能。当我们实现一个自定义的集合类并希望该类支持枚举功能时,通常需要实现接口。
2025-01-05 11:24:57
876
原创 Unity保存玩家的数据到文件中(Unity的二进制序列化)
Unity中的二进制序列化是一种将游戏对象或数据结构转换为二进制格式的过程,以便于存储或网络传输。这使数据能够以高效的方式保存,同时在需要时可以被正确地恢复(反序列化)回原始状态。二进制序列化对于保存游戏进度、网络同步数据或资源打包(如AssetBundles)特别有用。二进制序列化通常比文本格式(如JSON、XML)更快,占用空间更小,但可能不如文本格式易于调试或跨平台兼容。我们可以使用来实现更复杂的自定义序列化需求,虽然不是Unity引擎直接推荐的方法。这个类是.NET的,完全限定名是。
2024-06-24 10:13:27
1516
原创 C#的Switch语句3(如何为一段代码应用多个case标签)
进行字符串判断的时候,我们通常需要将其转换为小写或者大写,避免因为首字母大写或其他大小写问题,导致两个相同的字符串不匹配,在C#中,ToLower() 是 System.String 类的一个实例方法,用于将字符串中的所有字符转换为小写。当在switch语句块中遇到return语句时,它不仅仅会终止当前switch块的执行,而且会直接结束包含该switch语句的整个函数的执行,并立即返回到调用该函数的地方。使用return可以在处理特定情况后立即结束函数,避免了不必要的代码执行,提高了代码的效率。
2024-06-19 14:31:16
1327
原创 C#的Switch语句2(case后的值与模式匹配)
关键字了,default定义了一个默认的代码块,当Switch表达式的值与任何一个case标签的值都不匹配时,程序会执行default语句块中的代码。这在处理未预期或不明确的输入值时非常有用,确保了代码的健壮性,避免了因没有匹配的case而直接跳过Switch结构导致的潜在问题。当在switch语句块中遇到return语句时,它不仅仅会终止当前switch块的执行,而且会直接结束包含该switch语句的整个函数的执行,并立即返回到调用该函数的地方。但在某种写法下,C#也是可以穿透的,在文章后面会讲解。
2024-06-19 13:41:57
2572
2
原创 C#的Switch语句(在C#中如何根据结果执行不同的代码)
注意,仅限于离散值,也就是说你不能直接用switch来测试一个范围内的值(比如年龄是否在18到65之间),或者浮点数的精确相等(因为浮点运算可能存在误差),而是需要将这类连续的或非精确的比较转化为对离散值的检查,比如通过区间划分成具体的 case。离散的值,指的是在一个集合或数列中,各数值之间彼此独立,不存在介于两者之间的其他可能值,这样的值我们称之为离散值。进行更复杂的条件检查。,当掷一个标准的六面骰子时,可能的结果是1、2、3、4、5、6,这些都是离散的值,因为不存在介于这些整数之间的结果。
2024-06-15 14:33:00
4666
翻译 Unity多人游戏开发 - Netcode for GameObject - 1.6.0 - 官方文档中文翻译 - 开始使用
Netcode具有自定义生成处理程序,用于替代UNet的自定义生成函数。请查看对象池以获取更多信息。
2024-05-29 19:51:23
810
原创 打开程序时提示Unsupported Graphics Card如何解决?
找到你的显示适配器,注意,这个方法仅适用于有独显+核显的设备,如果只有独显没有核显,或只有核显,没有独显,是无法使用这个解决方案的。如果你只是偶尔弹出这个故障,并非一直有,那么等下次重新设备之后,再重新进入控制面板,然后点击“启用设备”,再打开程序一般也能打开了。最后会让你重启,重启之后,进入到Intel Arc Control,检察一下版本,如果不是最新版,就点击一下“快速安装”。如下图所示,打开程序后,弹出提醒,Unsupported Graphics Card,然后无法打开程序。然后点击设备管理器。
2024-05-23 10:19:46
6826
原创 C#中实现接口的一些小知识(C#用abstract或virtual来实现接口成员)
在抽象类(abstract class)中实现接口时,如果抽象类选择部分实现接口(也就是只提供部分成员的实现),那么未实现的接口成员可以在抽象类中声明为。修饰),这并不影响它作为接口成员的实现,也就是说,你只需要实现这个方法,那么就相当于同时实现了接口和抽象类(或虚方法),同时也允许派生类进行覆盖。来实现接口成员,因为接口中的成员默认都是实例成员,并且它们表示一种契约,要求任何实现该接口的类都必须提供这些成员的具体实现。在非抽象类中,如果一个方法同时是接口实现也是基类虚方法或抽象方法(即用。
2024-03-08 22:39:29
736
原创 C#中的浅度和深度复制(C#如何复制一个对象)
接着,我们修改了复制得到的对象及其引用类型字段的属性值,最后输出原始对象和复制对象的属性值。这意味着如果一个类包含引用类型成员,在执行深度复制时,不仅复制这些引用,还会递归地复制引用所指向的对象,直到所有的引用都指向全新的对象实例。当进行浅复制时,系统会创建一个新的对象实例,但这个新对象的字段将与原始对象中的值类型字段具有相同的值,而对于引用类型字段,则仅仅是复制了。也就是说,如果一个类中有引用类型的成员变量(比如数组、其他自定义类的对象等),那么浅复制后,新对象和原对象的这些引用类型成员仍然指向。
2024-02-07 17:36:01
3998
原创 C语言判断输入的字符串中括号是否成对匹配
给定一个只包含圆括号(‘(’ 和 ‘)’)的字符串,使用栈结构判断这个字符串中的括号是否有效,即每一个 ‘(’ 都有与之对应的 ‘)’,并且括号的顺序是正确的。当遇到右括号时,检查栈是否为空;test_case_3: 输入 “(()())”,预期输出:匹配。test_case_4: 输入 “((()))”,预期输出:匹配。test_case_2: 输入 “(())”,预期输出:匹配。test_case_6: 输入 “()(”,预期输出:不匹配。test_case_7: 输入 “(()”,预期输出:不匹配。
2024-01-18 23:16:56
767
1
原创 安装Unity详细教程(如何获取免费个人版许可证)
Unity Hub是用来管理的,其中并不直接包含Unity编辑器的本体文件,我们需要单独安装Unity编辑器,安装的方法也很简单,就是在Unity Hub的安装页面,如下图所示,点击“安装”-“安装编辑器”。点击登录后会进入到浏览器,如下图所示,如果你有Connect APP,直接通过APP扫码登录,如果没有,也可以通过点击账户登录,然后登录。在使用Unity之前,我们还需要获取相应的许可证,Unity许可证分为多个版本,有免费的,和付费的,免费的具有一定的申请条件。注意观察一下,自己是否符合获取要求。
2024-01-02 22:50:47
18138
5
原创 C语言计算三阶行列式
编写一个C语言程序,定义一个函数reverse_string(char *str),该函数接收一个字符指针作为参数,用于指向一个以\0结尾的字符串。在循环体内,首先创建一个临时变量 temp 来存储 start 指针所指的字符,然后将 end 指针所指的字符赋给 start 指针的位置,最后再将之前暂存的 temp 赋值给 end 指针的位置。通过这样的步骤,实现了两个指针所指字符的原地交换。然后,将原字符串末尾的字符(索引为 last 的位置)赋值给第一个字符的位置(索引为 i 的位置)。
2024-01-01 21:26:30
1076
原创 C语言编写函数将字符串逆序存放
每次循环中,交换 tempPtr 指针和 endPtr 指针指向的字符,并将两个指针分别向后和向前移动一位。定义了两个指针 first 和 last,分别指向字符串的开头和结尾,还有一个变量 temp 用于交换字符。对于每个非空字符,将 length 的值增加 1,并将 tempPtr 指针向后移动到下一个字符。开始一个循环,条件是 first 指针没有达到 last 指针,也就是还没有达到字符串的中点。通过循环,使指针 last 移动到字符串的结尾部分,即指向字符串的末尾的空字符 ‘\0’。
2023-11-11 13:03:53
1475
原创 C语言编写链表的初始化、插入、删除、打印操作
如果 prev 为空,说明要删除的节点是头节点,将 *head 指向 (*head)->next,然后释放 current 节点的内存。然后,检查链表是否为空,如果为空则将新节点直接设置为头节点,如果不为空则遍历链表直到找到链表尾部,将新节点链接到尾部。首先,使用两个指针 current 和 previous 来遍历链表找到需要删除的节点,然后通过修改指针的指向来删除节点,并使用 free 释放节点所占用的内存空间。通过遍历链表,每次输出当前节点的值,然后将指针指向下一个节点,直到链表末尾。
2023-11-11 12:34:42
702
原创 C语言编写学生成绩管理系统-要求有增删改查(C语言基础题-9道)
StudentItem 用来存储学生的姓名和成绩,而 StudentNode 用来表示链表中的节点,它包含一个 StudentItem 类型的变量和一个指向下一个节点的指针。该函数要求用户输入要修改成绩的学生姓名和新的成绩,然后从链表头开始遍历每个节点,寻找匹配的学生姓名。比如,如果用户选择添加学生,我们会创建一个新的节点,然后获取学生的姓名和成绩,最后将其添加到链表的开头。该函数首先遍历链表,找到最后一个节点,然后创建一个新节点,要求用户输入学生的姓名和成绩,并将新节点添加到链表末尾。
2023-11-06 14:37:22
1087
原创 C语言编写图形化界面-为按钮指定样式-监听按钮点击事件
看到其符号常量的十六进制值,想必我不说你也能看出来,这就是默认值,也就是说,就算我们不使用此标志,也是没有关系的,默认创建的就是这个。可以发现CreateWindow 函数的自由度还是比较高的,但创建的时候需要填写的内容太多了,我们之前只是简单的进行了一个封装,使其完全丧失了自由度,接下来我们进行新一轮的封装,让其为我们后续的开发提供更大的便利。前面那个复选框,你可以发现,他点击后并没有勾选,使用BS_AUTOCHECKBOX (0x00000003)可以创建一个自动复选框样式的按钮。
2023-10-27 15:04:24
2968
原创 C语言编写图形界面-创建按钮
在该函数中,使用 CreateWindow 函数创建一个按钮对象,并设置按钮的属性,包括文本内容、位置和大小等。使用 “BUTTON” 表示创建一个按钮控件,注意,这个类名是预定义的,不是我们自己自定义设置的,所以如果要创建按钮的话,这里只能填入"BUTTON"。CreateWindow函数的第二个参数同样是字符串类型,用于指定按钮控件的上显示的文本内容,即按钮上显示的文字。要在窗口上显示一个按钮,我们可以在窗口过程函数中处理 WM_CREATE 消息,在该消息中创建按钮并设置相关属性。
2023-10-27 14:35:18
2626
原创 C语言定义一个结构体并为其初始化(C语言基础例题7例)
本篇文章的题目为C的基础练习题,结构部分。做这些习题之前,你需要确保已经学习了结构的知识。题目主要考察结构的初始化,用于巩固初始化结构的知识。
2023-10-24 19:41:00
360
原创 C语言实现计算二维数组每列最大值与最小值的差值(C语言基础例题5例-二维数组篇)
本篇文章的题目为C的基础练习题,二维数组部分。做这些习题之前,你需要确保已经学习了二维数组的知识。
2023-10-24 11:30:57
1767
原创 C语言将数组中的数逆序存放(C语言基础编程练习3题-指针篇)
本篇文章的题目为C的基础练习题,指针部分。做这些习题之前,你需要确保已经学习了指针的知识。本篇文章可以用来在学完指针后加深印象,也可以用于大学课后习题。
2023-10-17 23:11:52
5968
原创 Godot2D角色导航-自动寻路教程(Godot获取导航路径)
当目标位置不在当前网格的时候,他返回的全局坐标是当前网格内离下一个目标点最近的某一点的坐标,也就是网格最边界的某点。我们通过GetNextPathPosition方法获取到的全局点的坐标,并不是直接就到了你的目标位置点,而是通过网格计算出来的,该方法获取到的全局坐标,是你当前角色所位于的网格内的坐标。如上图所示,这是我们创建的导航区域,也就是角色可以移动的区域,仔细观察你会发现,他并不是一整块的,而是由一个一个相邻的网格组成。如下图所示,当目标点位于当前网格内部,则会直接返回目标点的全局位置。
2023-10-17 22:11:45
1619
翻译 Godot4.1官方文档-中文翻译-使用TileSets
瓦片地图(tilemap)是一个用于创建游戏布局的瓦片格。使用TileMap节点设计关卡有几个好处。首先,它们允许你通过在网格上“绘制”瓦片来绘制布局,这比逐个放置单个Sprite2D节点要快得多。其次,它们允许更大的关卡,因为它们经过优化,可以绘制大量的瓦片。最后,它们允许你为瓦片添加碰撞、遮挡和导航形状等功能。要使用瓦片图,首先需要创建一个TileSet。TileSet是一组可以放置在TileMap节点中的瓦片。创建TileSet后,你将能够使用TileMap编辑器来放置它们。
2023-10-15 09:48:17
3489
原创 Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)
使用代理,那我们就需要告诉他一个目标位置,然后让它告诉我们移动到那个位置的路径,这个位置我们可以通过设置TargetPosition属性来告诉我们的NavigationAgent2D节点。另外,我们设置了目标位置后,还需要做其他的工作,这就与Unity有所不同,Unity设置好目标后,就可以自动的向着目标点移动,而在Godot中,我们需要在代码中,自动编写移动逻辑,设置了目标点后,只是让引擎来帮你计算到目标点的路径而已,并不帮你移动。然后,我们可以通过这个路径,使该节点沿着路径移动,以达到指定的目标位置。
2023-10-12 23:17:14
1534
原创 Godot2D角色导航-自动寻路教程(Godot实现角色随鼠标移动)
Godot为2D和3D游戏提供了多个对象、类和服务器,以便于基于网格或基于网格的导航和路径查找。说到导航,就得说一下导航网格,导航网格定义了角色可以站立和移动的区域,以其中心为基准。官方文档导航部分。
2023-10-09 23:00:40
2004
4
原创 C#声明Employee类实现其构造函数(C#课后练习题-构造函数篇)
本篇文章的题目为C#的基础练习题,构造函数部分。做这些习题之前,你需要确保已经学习了构造函数的知识。本篇文章可以用来在学完构造函数后加深印象,也可以用于大学课后习题。
2023-10-08 22:50:06
1289
原创 Unity2D创建帧动画片段
动画是游戏中一种使对象表现出运动或变换的方式。当涉及到动画时,我们通常就会用到Animator组件。它允许我们在Unity编辑器中创建、管理和控制这些动画,并将其应用于游戏对象。这篇文章将对Animator组件的使用进行部分讲解。
2023-10-06 11:48:47
1206
原创 【Unity2022】Unity实现手机游戏操控摇杆(实现操控轮盘)
接下来就可以在其他所需获取输入的地方调用我们的GetInputDirection方法,来获取玩家的输入了,具体示例代码如下所示;创建两个UI图像,一个用于表示背景,作为父物体,命名为JoyStick,一个表示摇杆,命名为Center。背景图像选择一个圆,最好加点半透明的属性,最终完成图如下图所示。
2023-10-04 15:51:43
3516
原创 【Unity2022】Unity实现在两个物体之间连出一条线
DrawRope方法通过计算起点和终点之间的距离,并通过设置Line Renderer的位置数目来确定绳子上的点的数量。然后,我们在循环中使用Lerp函数在起点和终点之间插值来获取每个点的位置,最后将其设置为Line Renderer的位置。我们可以使用LineRenderer组件来实现连线,该是Unity中的一个内置组件,它允许我们在场景中绘制线条。同时要为Line Renderer组件的Materials属性提供一个Material,如下图所示,不然默认是没有Material的,所以线条会呈现紫色。
2023-10-04 13:57:55
7753
原创 【Godot4.1】Godot实现闪烁效果(Godot使用定时器实现定时触发的效果)
在上面代码中,我们定义了 StartBlinking() 方法,该方法会设置 Timer 的等待时间和循环触发,并连接 Timer 的 timeout 信号到 OnTimerTimeout() 方法。接着回到编辑器中,在检查器中找到BlinkingEffect脚本的属性,点击一下Target Node Path属性,在弹出的窗口中选择Sprite2D节点,即可为其赋值。首先弄一个用于显示的Sprite2D,右键单击任意节点,然后选择添加子节点,接着选择Sprite2D,如下图所示。
2023-10-02 20:52:14
1035
原创 Unity如何生成随机数(设置种子)
接下来,我们使用Random类的其他方法如Random.Range和Random.insideUnitSphere生成基于自定义种子的随机数。因此,要根据你的项目需求,做好选择。如果有人玩过我的世界,可能会知道种子这个东西,我们在玩我的世界的时候,都知道地图是随机生成的,但是也知道,同一个种子会生成相同的地图,这是为什么呢?其实随机数生成是基于种子的计算,相同的种子将产生相同的随机序列。默认情况下,Random类的种子是基于系统时间的,但你也可以使用Random.InitState方法自定义设置种子。
2023-09-28 22:05:29
4354
原创 Godot信号教程(使用C#语言)| 创建自定义信号 | 发出自定义信号 | 使用代码监听信号
我们可以自定义信号,而不是使用Godot内置的信号,使用自定义的信号要在脚本的类中编写,可以在类的成员变量区域使用signal特性来声明信号。在声明信号时,需要注意信号命名的要求,结尾需要以EventHandler为后缀。代码如下所示。// 声明信号[Signal]通过上述代码,我们声明了一个名为"HealthDepleted"的信号。注意,信号名的末尾必须以"EventHandler"结尾。这是一种命名约定,有助于标识信号与其他方法的区别。
2023-09-26 16:40:37
4328
原创 C#的属性讲解
除了普通属性外,C#还提供了只读属性(只有get访问器)和写入器属性(只有set访问器),以及静态属性和索引器属性等类型的属性,以满足更多复杂的需求。属性只是封装了对类的字段的访问和修改,它们提供了一种更高级的方式来读取和写入字段的值。例如,我们可以在设置器中验证输入值的有效性,并在获取器中返回计算的属性值。当我们定义属性时,我们可以使用自动实现属性来简化代码,特别是对于只提供基本的 get和 set的属性。使用属性时,我们可以像使用字段一样访问和设置属性的值,但实际上是调用了对应的访问器。
2023-09-24 22:00:22
1449
原创 VS2022创建控制台应用程序后没有Main了,如何显示Main?
用VS2022创建一个控制台应用后,没有名称空间和Main函数了,只有一个WriteLine,如下所示。
2023-09-24 21:30:55
5656
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人