自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 虚幻引擎学习日志3.31

这里其实不难想到,我们仅使用了人物的移动速度来判断跳跃是否结束,但是若结束后Speed值为0系统还是会判断跳跃未结束,因此要添加一个新的判断条件——垂直速度大于某个值时,即第二次起跳时,人物会进入Locomotion,而第二次起跳会导致人物在垂直方向上的速度大于该值,于是刚刚进入Locomotion就再次进入Jump_Start,完成连续起跳的动画播放。这是由于即使我们配置好了各个状态下对应的动画,但是并没有配置这些状态是如何切换的,系统是“不知道”如何实现这些动作的切换的。

2026-03-31 15:55:26 273

原创 C++学习日志——STL篇

这是因为在声明str3的时候并没有声明其参数列表,因此在调用构造函数的时候就不会向构造函数的参数列表中传入任何值,此时str3的值是一个随机值。同时,string内部存在着'='的重载,能够将一个字符也是为一个string容器的内容,因此之后再向str3赋值为单个字符a就不会报错。这是因为,此时sizeof函数检测的不光光是一个字符串/字符数组的长度,而是一个实例化的对象的长度,其中不仅包含了成员变量还有成员函数,因此输出的长度结果是固定的都是40,这是取决于开发环境的。

2026-03-23 15:43:28 295

原创 C++学习日志——STL篇3.22

对于类,我们回顾之前在面向对象篇学习的内容,于是知道要想要在main函数中调用Solution的成员函数,要首先实例化一个Solution类S1,并把用例的两个数组vector是实例化。接着再分别实例化两个用于接受检测结果的vector类v1和test,使用S1的成员函数buildArry将用例的对象v和test1作为参数传入,同时使用赋值语句赋值给接收数组v1和test,最后调用S1的输出函数PrintArry并把接收数组作为参数传入以输出结果。1.vector课后习题。1)基于排列构建数组。

2026-03-22 14:20:46 22

原创 C++学习日志——STL3.21

注意到我们这里传入的是一个返回值为bool的函数cmp,但是在sort函数的参数列表中却没有声明cmp的参数列表,这是因为对于sort函数的第三个参数仅需要传入一个比较规则而并非一个确定的值(因此直接在参数列表中写1或者0编译器会报错,先不要求掌握)。这里空间预留的接口是reserve(预定,预留),通过向该接口传入参数100使得vector对象的容量最开始就被设置为了100,因此在尾插插入数据时,无需再实现扩容,大大减少了扩容操作的次数,降低了程序的时间和空间复杂度。此时它的元素值和v1相同且容量是5。

2026-03-21 15:52:50 293

原创 C++学习日志——STL篇3.18

首先,当前学习内容是vector容器的赋值,所谓赋值,指的是将一个数值赋值给一个变量,也就是说,在赋值这个操作实现的时刻,改变量就已经被创建且被初始化过了,此时的赋值可以理解为将容器內部数值由初始化内容修改为当前我们想让其等于的值,这个操作主要由调用vector对象的assign()函数实现。以长度为4的vector容器为例,当一个vector容器中充满数据,向其中插入新的数值时,它会自动拷贝原有数据并粘贴到一个新的位置,且该位置长度大于原来的位置,并把此时要插入的数值插入进vector容器中。

2026-03-19 18:28:13 360

原创 C++学习日志——STL篇

同时,由于STL的组件可以在不同的场景和项目中使用,因此提升了代码的复用。例如,当我们希望将一个元素插入至一个长度为4的数组中,且数组原本已经有4个元素时,此时对于数组而言,插入会导致数组下标越界,当数组存储空间的连续位置中存有其他内容时就会造成冲突,因此数组下标越界在C/C++中是不被允许的。vector是STL中最常被使用到的容器。此时把v2_1的初始和结束位置都复制给了v3,由于是左闭右开的取值方法,因此即使v2_1的end()的位置并不指向有实际意义的位置,但仍可以把v2_1的全部值传给v3。

2026-03-17 17:06:46 328

原创 C++学习日志——泛型编程篇3.14

接着对数组初始化时要调用类的构造函数,回想以下数组的声明中,除了声明数组的数据类型和数组名,还要声明数组的大小长度,因此对于构造函数的参数列表要添加一个整形参数n(无论是整形数据类型的数组还是浮点型数据类型的数组,其数组的长度都是一个整数),并在构造函数的参数列表中将n赋值给成员变量size。此时思考一个问题,这里实现了对于整形数据类型的动态数组的定义,但是如果我们想实现一个数据类型是浮点、字符数组等数据类型的数组,就要定义一个个新的类,这显得十分的冗余。这里的T和之前的T一样,都是占位符;

2026-03-14 17:30:41 294

原创 C++学习日志——泛型编程篇3.12

根据main函数中的调用情况,可以推断出T2是浮点数据类型,T3是整形的数据类型,但是对于T1的数据类型,通过声明了返回值的数据类型是不可以实现对T1的推导的。对于函数AddDouble,其返回类型double和c的数据类型一致,但是a和b的数据类型和其参数列表中的并不一致,但程序仍然可以运行,这是由于普通函数调用时,当实参的数据类型和形参的数据类型不一致时可能会存在隐式类型转换(结构体、类时如果ide支持转换会发生转换,不支持则会直接报错),把a和b的数据类型由int修改为double。

2026-03-14 10:59:34 314

原创 C++学习日志——面向过程篇3.11

此时通过运算符new为a分配一个整形类型的数据,并复制为v,该数据是存储于堆区的;这里输出一个随便的字符串常量位置,发现它即使不和之前的全局变量、静态变量连续,但位置也十分相近,和局部变量时的存储空间差距很大但距离全局变量和静态变量的存储空间又十分相近,这说明字符串常量的存储空间也是位于全局区的。此时c的地址和g_a与g_b连续且间隔为4,这说明c的存放空间由局部变量位置被修改至了与全局变量一致的全局区中,当我们把d也修改为静态变量时,发现它的存储空间于c连续,按照声明的先后顺序依次存放至全局区内。

2026-03-12 21:24:43 312

原创 C++学习日志——面向过程篇3.10

于是这里联想到函数中实参和形参的概念,因此把main函数中的实参a和MoveCircle中的形参c的地址也一并输出,通过输出结果发现这里MoveCircle函数对结构体的修改方式是通过拷贝实参的方式对形参修改,因此实际上这里实参a的参数值并没有被修改。结构体创建的第三种方式(cpp),注意此时结构体变量名并不是在main函数中声明的,而是在结构体定义后,这种声明的方式虽然也是创建结构体但是导致cpp是一个全局变量,而C是一个生存期在main函数的局部变量(这里cpp的初始化也可以使用和C一样的数组格式)。

2026-03-11 12:06:33 331

原创 C++学习日志——面向对象篇3.9

由于这里是实例化的b,与a不同,a是通过参数传入导致的隐式转换,因此__vfptr指向的第一个元素的内容不同——a的第一个元素为Cat::eat(),而b的第一个元素为Animal::eat(),且两个元素的地址不同;在第21行代码处添加一个断点(F9),并单击F5运行此处内容,点击ide下方的窗口至“监视”,在监视中输入c作为观察对象,发现其包含了一个Animal的子对象,c和子对象的内容都为{..},表明二者内部都不含成员变量,即空。有时基类中的函数可能没有任何实现,即函数的功能主要由派生类来实现。

2026-03-10 13:17:17 313

原创 C++学习日志——面向对象篇3.8

语句就是上面理解当没有实例化基类直接实例化派生类时派生类对象和基类之间关系的证明)通过在Test函数的输出语句中添加一个输出c的Animal类的m_Data值,证明了实际上基类中的m_Data值并没有因为派生类的重名和构造函数导致被覆盖掉,但是地址又是如何呢?所谓的“多继承”,就是指对于一个派生类,它不仅可以单单继承一个类,还可以同时继承多个基类,即当我们需要实现一个类并且希望它能过完成多个已经实现的类的功能时,继承就像接口一样,此时新的派生类只需要完成调用接口即可,这很好的体现了C++的面向对象特性。

2026-03-09 18:24:03 344

原创 C++学习日志——面向对象篇3.7

在上一篇章中写过“对于成员函数的运算符重载,其左值默认是对象本身(*this),而右值是参数列表中的数据”,那么以此可以判断,我们在定义赋值运算符的重载时,其右操作数是参数列表中的Hero& h,这里为了节省拷贝空间采用了引用法,那么因此为了保持程序的效率和赋值运算符的左值右值数据类型一致性,这里把数据的返回类型也一并修改为Hero&类型,并返回*this(this是一个指向对象的指针类型,这里不是定义因此不用写*,指向对象的指针的数据类型肯定不是Hero&类型,因此要对其解引用为this指向的地址)。

2026-03-07 16:16:41 300

原创 C++学习日志——面向对象篇3.6

除了作为成员函数,运算符的重载更多情况下是做为一个全局函数来声明和定义的,这里我们尝试将其修改为全局函数:仅仅简单的将成员函数拷贝并赋值到类外是不可以改变其生命周期的,这是因为我们在定义函数时使用了this指针,该指针只能指向一个类(的本身),因此这里需要将this的部分修改为类名,且由于在类中声明只需要传入一个complex类和它本身相加,但作为全局函数后并没有“类本身”这个概念,因此要将两个加数添加到参数列表中;注意输出结果中,x的前置++符合我们的计算预期,而复数对象a的值却与预期不符。

2026-03-06 18:14:24 351

原创 C++学习日志——面向对象篇2.17

这里的输出结果明显和我们预期不符,这是由于当成员变量名salary和形参salary相同时,对于该语句worker(int salary)而言,形参的作用域为该语句,此时会让形参列表中的参数名覆盖成员变量名,于是该语句就变成了一个没有初值的形式参数salary赋值给形式参数salary自己。在我们实例化一个对象时,也可以用到关键字“const”,它表示该对象的成员函数和成员变量都是不可以被修改的,此时类的声明中既可以又常函数也可由普通函数,但是常对象不可以调用这些普通函数,仅可以调用声明中的常函数。

2026-03-06 11:52:02 338

原创 虚幻引擎学习日志2.17

回到BP_character蓝图中,找到上方“视口”菜单栏,注意此时人物模型并没有被添加,需要我们自己添加一个人物模型,而预览中的胶囊体是人物的碰撞检测区域,在上次学习中我们在门上添加了一个自动检测碰撞的碰撞“盒子”,此时就是当视口中玩家的胶囊体和门的碰撞“盒子”发生/结束重叠时,门就会自动播放开门/关门的动画,这是一个不够精确的碰撞检测范围。再添加一个“摄像机组件”,这里要使“弹簧臂组件”不是其他任意组件的子类,“摄像机组件”是“弹簧臂组件”的子类,选中后者并调整视口中的位置。

2026-02-17 21:58:08 475

原创 C++学习日志——面向对象篇

并在main函数中的x.Get_Paypass (1)函数左侧添加一个断点(F9),在上方调试菜单栏找到调试->监视,添加下方的监视栏,它的作用是在程序调试过程中通过在该栏添加需要监视的变量实现对变量值的实时监视,由于我们在接口部分并没有把它写成一个可以输出到屏幕上的方式(Get_Paypass函数是一个赋值函数,且main函数不能直接访问私有变量m_Paypass,因此只能通过对变量的监视实现反馈)。在创建对象的时候,对象初始化的过程由系统自动完成,方式按照类生成时的构造函数生成。

2026-02-15 18:30:20 505

原创 C++学习日志面向过程语法篇2.15

需要注意的是,实际上a并不是一个字符类型的数据变量,因此第八行的输出结果和a的初值也并不相同而是'y',这是因为a在声明数据类型时是char类型,这会使得a这里在第一个y后被截断,因此第六行输出的是‘y’的ASCII码,而且第9行的输出结果和char类型的长度一致。第七行的输出结果是5,因为strlen函数是求字符串的长度的函数,这符合我们的预期,但是第八行的输出结果却不是5而是一个很离谱的33,这是因为字符数组没有像字符串一样默认的'\0'这个字符,strlen函数也就无法识别数组是否已经结尾。

2026-02-15 11:03:06 568

原创 虚幻引擎学习日志(2.10)

把“timeline”节点的“play”引脚和“组件开始重叠时”的执行引脚相连接,“组件结束重叠时”的节点和“timeline”的“Reverse”相连接,这是由于当碰撞“盒子”和人物碰撞模型相重叠时要执行“开始开门”的动画,而当人物碰撞模型和碰撞“盒子”结束重叠时要把“开始开门”这个动画倒着重新播放一次。回到“事件图表”,发现“timeline”节点的右侧引脚多了一个“新建轨道0”,找到节点的“update”引脚引出搜索“set rotation”,找到“设置相对旋转(Door)”

2026-02-10 23:43:12 510

原创 虚幻引擎学习日志(2.3)

在空白处单击鼠标右键并搜索“IA_Move2”,它为之前我们设置的输入操作,展开节点会发现此时由很多引脚,最下面的三个本次先不讲,而倒数第四个表示的是方向,即移动的方向,拖拽引脚并搜索“Break Vector2D”,实现把反向分为x轴和y轴(对于游戏人物的坐标轴),其中x轴表示向前的方向,y表示横向的反向。注意到“操作”下的“值类型”,它表示这个操作要如何操作控制设备以实现该操作,如默认的布尔类型(bool)指的是按下按键就会触发操作,不与按键事件或者鼠标旋转等操作有关,如“跳跃”操作。

2026-02-05 11:06:58 631

原创 虚幻引擎学习日志(1.24)

在介绍主工具栏时我们提到了内容侧滑菜单(CTRL+空格),它是显示我们编辑的内容的资源管理器,可以通过它来决定新创建以及导入的内容的保存位置,需要说明的是,它的根目录即为我们在最开始生成这个项目的文件,而接下来的子目录与电脑中的资源管理器中的内容是一致的,也就是说,当我们从资源管理器打开文件并删除文件中的某个文件时,下次我们打开ue引擎的对应项目时,其中被删除的内容也不会再内容侧滑菜单中展示。相同的,当我们从内容侧滑菜单中删除项目中的某个文件时,再通过资源管理器打开对应的文件时,也不会有被删除的内容。

2026-01-24 12:08:48 897

原创 虚幻5引擎学习日志

这是一篇unreal ungine 5自学的日志,用于记录本

2026-01-20 10:56:55 620

空空如也

空空如也

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

TA关注的人

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