自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法刷题笔记——动态规划篇

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的。这样才是一个完整的思考过程,而不是一旦代码出问题,就毫无头绪的东改改西改改,最后过不了,或者说是稀里糊涂的过了。做动规的题目,写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];

2024-07-21 12:30:31 421

原创 算法刷题笔记——回溯算法篇

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

2024-07-01 14:45:08 505

原创 UI Toolkit系统学习

UI Toolkit此文章用于学习UnityUI系统,手头的项目做完会来完善Unity上方菜单栏点击Window->UI Toolkit->Samples可以看UI Toolkit中的很多样例。

2024-06-27 20:38:24 1165

原创 侯捷C++及C++ Primer plus(六)

虚指针:其实就是一个地址值,以该地址为起始地址的一片内存单元存放着各虚函数的入口地址,这一片内存单元合起来就称为虚函数表(想象一下:一片内存单元存着许多函数地址,想执行哪个虚函数就来这片内存单元查找该虚函数的入口地址,就像查表一样,故称虚函数表)。子类的构造函数首先执行自己,然后调用拥有对象的析构函数,最后执行父类的(和构造函数的执行顺序完全相反)子类的构造函数首先调用父类的默认构造函数,然后调用拥有对象的构造函数,才执行自己的。子类的构造函数首先调用父类的默认构造函数,然后才执行自己。

2024-06-26 14:53:41 281

原创 侯捷C++及C++ Primer plus(五)

函数模板在使用时不必指明type,函数在调用时会进行实参推导,根据调用时的参数推导出type的类型。在设计class的时候,认为可以把哪种变量或函数抽出来允许使用者任意指定就将其前面加T,将其抽出。如果传入函数模板的类型为stone,而stone中没有重载函数模板中用到的运算符,则此时会报错。箭头符号有一个特殊的行为,作用下去得到结果后箭头符号会继续作用下去。调用智能指针的构造函数,将普通指针传入进去生成一个智能指针。传入构造函数的初值如果是该类的子类所构成的,则可以成功赋值。

2024-06-26 14:53:04 830

原创 算法刷题笔记--二叉树篇

感觉树这一章还是没搞清楚,可能是基础不扎实的缘故,学完C++巩固底层知识后二刷确定递归函数的参数和返回值 :确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件 : 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定单层递归的逻辑:确定每一层递归需要处理的信息。

2024-06-26 14:48:27 840

原创 算法刷题笔记--字符串篇

KMP主要应用在字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。

2024-06-26 14:47:22 628

原创 算法刷题笔记--栈与队列篇

其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。而且优先级队列内部元素是自动依照元素的权值排列。缺省情况下priority_queue利用max-heap(大顶堆)完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。

2024-06-25 15:00:27 695

原创 算法刷题笔记--哈希表篇

虽然std::set、std::multiset 的底层实现是红黑树,不是哈希表,std::set、std::multiset 使用红黑树来索引和存储,不过给我们的使用方式,还是哈希法的使用方式,即key和value。std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。我们需要依靠哈希表中的空位来解决碰撞问题。

2024-06-25 14:58:51 997

原创 断点调试。

但是有时候断点也变得很不现实,比如下面的情况,我需要遍历100000次,如果我们需要逐语句执行,那我们可以在这里点击一天,但是有可能我们只关心报错时 i是多少。(1)点击附加到Unity,不过要注意,无论你是否在Unity中运行了游戏,都可以断点,也就是说你可以在编辑器环境下打断点。解决方式如下图,使用try包裹可能发生报错的代码,然后断点打在catch内,也可以再此处输出一些信息。(3)去启动游戏,或者做某件你想要Debug的事情,比如你的背包有BUG,那么现在打开背包看看原因。

2024-06-25 14:57:36 150

原创 卡牌肉鸽王国之泪(四)

如果您的转换没有任何条件,那么Unity编辑器只考虑退出时间(Exit Time,英文中没说明一点,如果没有Condition的Transition的话,你想要Exit Time是触发,那HasExitTime一定要勾上,不然就没有效果了),当到达退出时间(Exit Time)时就会发生转换。确认按钮会调用Onconfirme中的方法使CardManger中的UnlockCard将当前选中的卡牌传入卡牌库中,让玩家可在之后的回合中抽取到该卡牌,并通过事件调用函数实现UI面板的关闭。

2024-06-25 14:55:36 599

原创 卡牌肉鸽王国之泪(三)

然后测试方法能用了,但是启动游戏的时候玩家的血条能显示,敌人的显示不出来了,可是明明都是用的同一个脚本同一个血条,为什么一个就行一个就不行啊妈的,神经病。骂完突然想到了一种可能,转换坐标时使用到了摄像机的位置,是不是因为敌人是创建在特殊场景中的,而场景中压根没有摄像机,所有才会显示不出来且报空。代码的执行顺序问题,抽卡代码和回合开始重置能量的代码调用了同一个事件,卡牌的能量判断在前,能量的恢复在后,所以出现了这种问题。创建玩家回合开始,敌人回合开始,敌人回合结束的事件,并创建不同的事件函数对其进行监听。

2024-06-25 14:54:36 804

原创 算法刷题笔记--链表篇

注意要先写cur->next,因为如果先写了cur->next->next,假如此时cur->next==null,cur->next->next会出现空指针报错。因为设计链表中所有的方法都是自己写的,所以有可能出现的问题是,实际问题与所表现出来的问题不一致。例如:插入算法写错了,但是运行报错是在取值算法中体现。在链表第index个节点前面插入一个节点。获取链表第index个节点的数值。删除链表的第index个节点。在链表的最前面插入一个节点。在链表的最后面插入一个节点。

2024-06-25 14:52:13 230

原创 仿星露谷物语模拟经营项目(名字未定)

树分为Top(树冠)和Trunk(树根)两部分,为树冠添加animator组件,将帧序列导入animation窗口中生成动画。添加Cinemachine,并为CMvcam添加像素完美相机拓展,调整body中的缓冲值到一个合适的位置。可以将所有图片素材打包成一张完整的图片,这样在调用或使用时Unity就会忽略掉他之间的缝隙。要点依旧是要把Pixel Perfect Camera设置好。前三层Bottom,Middle,Top为地面的三层。Stuff1,Stuff2为装饰物的两层。更适合像素游戏的相机。

2024-06-25 14:29:46 439 1

原创 热更新学习--xLua

通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。查找loder时首先执行了自定义的loder。

2024-05-18 14:20:31 724

原创 热更新学习--AssetBundle

1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;2,AssetBundle自身保存着互相的依赖关系;3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;可以归为两点:1,它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。

2024-05-17 21:30:34 877

原创 热更新学习--Lua语言

使用冒号时系统会自动传递当前的table给self 例如该函数self=person当通过.来调用的时候,self不会自动赋值,我们必须通过第一个参数来传递当前table。

2024-05-14 20:16:28 1007

原创 卡牌肉鸽王国之泪(二)

卡牌相关的方法的完成。

2024-03-27 05:58:26 550

原创 侯捷C++及C++ Primer plus(三)

运算符重载是一种形式的C++多态。C++允许将运算符重载扩展到用户定义的类型。例如,允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用哪种加法定义。重载运算符可使代码看起来更自然。要重载运算符,需使用被称为运算符函数的特殊函数形式argument-list表示该运算符的操作数。如果运算符函数是类成员函数,则第一个操作数是调用对象,它不在argument-list中。operator +( )重载+运算符,operator * ( )重载*运算符。

2024-03-23 18:55:35 679

原创 算法刷题笔记--数组篇

vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。在内部,unordered_set中的元素并不按照任何特定的顺序排序,而是根据它们的散列值组织到桶中,从而允许根据它们的值直接快速访问单个元素(平均时间复杂度为常数)。在unordered_set中,元素的值同时也是唯一标识它的键。键是不可变的,因此,unordered_set中的元素在容器中不能被修改,但是它们可以被插入和删除。

2024-03-23 18:55:02 1001

原创 侯捷C++及C++ Primer plus(二)

描述如何实现类成员函数类声明提供了类的蓝图,而方法定义则提供了细节。C++程序员将接口(类定义)放在头文件中,并将实现(类方法的代码)放在源代码文件中。

2024-03-23 18:54:03 738

原创 侯捷C++及C++ Primer plus(一)

猜数字结构体案例1结构体案例2。

2024-03-23 18:53:53 951

原创 2D小狐狸

移动(位置和旋转)行为碰撞体相互作用Body Type 发生变化时,各种与质量相关的内部属性都将立即重新计算,并且在游戏对象的下一个 FixedUpdate 期间需要重新估算连接到 2D 刚体的 2D 碰撞体的所有现有触点。根据触点数量以及连接到刚体的 2D 碰撞体数量,更改 Body Type 可能会导致性能变化。

2024-03-22 21:47:52 693

原创 侯捷C++及C++ Primer plus(四)

在调用父类中FindAndClone这个函数时如果生成的对象还是调用私有构造函数会造成addPrototype重复的添加了相同的对象,因此要调用友元的构造函数(该构造函数也可以为私有,主要是为了与另外的构造函数做区分),参数的作用主要是为了做区分。如果没有提供任何构造函数,C++将创建默认构造函数编译器将提供一个不接受任何参数,也不执行任何操作的构造函数(默认的默认构造函数),这是因为创建对象时总是会调用构造函数如果定义了构造函数,C++将不会定义默认构造函数。在计算机的文件系统中,有“文件夹”的概念。

2024-03-22 21:46:50 666

原创 卡牌肉鸽王国之泪(一)

UnityEvent也有数个泛型版本(参数最多也是4个),但要注意的一点是,UnityAction的所有带参数的泛型版本都是抽象类(abstract),所以如果要使用的话,需要自己声明一个类继承之,然后再实例化该类才可以使用。因为在房间加载的方法中传入的数据使RoomdataSo类型的数据,而数据中不包含我们所需的Colum和line类,所以将传入的类型更改为Room。每列生成的初始点会在前一列的基础上加间距。遍历房间列表将房间类型和房间数据匹配的添加到字典当中,这样就可以通过房间类型返回房间的数据了。

2024-03-22 21:36:36 625

原创 3DRPG小狗骑士

有时候我们需要在生命周期事件以外,自定义事件,例如,用一个图片代替鼠标时,从图片位置发射射线判断点击的物品,定义自己的鼠标点击事件处理不同的逻辑,需要事件名 OnMouseClick 和事件处理函数需要的参数类型 Vector3法一:继承 UnityEvent 泛型类,定义自己的事件类,优点是可以编辑器在 inspector 窗口在添加事件处理函数,就像是 UI Button 按钮的点击事件一样法二:使用 Csharp 的委托 Action 定义自己的事件,优点是使用方便...

2023-08-11 15:13:21 55

空空如也

空空如也

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

TA关注的人

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