读书笔记
文章平均质量分 70
记录我读过的书,与各位共勉
Currybeefer
理想是条不归路,不下战场才能赢
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《游戏编程模式》学习笔记(十四)事件队列 Event Queue
事件队列在队列中按先入先出的顺序存储一系列通知或请求。发送通知时,将请求放入队列并返回。处理请求的系统之后稍晚从队列中获取请求并处理。这解耦了发送者和接收者,既静态又及时。原创 2023-10-11 21:21:31 · 836 阅读 · 0 评论 -
《游戏编程模式》学习笔记(十三)组件模式 Component
单一实体跨越了多个领域。为了保持领域之间相互分离,将每部分代码放入各自的组件类中。实体被简化为组件的容器。组件模式没什么好说的,就是放弃传统的继承思路,用组合代替继承来达到对各个领域的解耦。不是让两个类继承同一类来分享代码,而是让它们拥有同一个类的实例。举例public:Bjorn(){}private:int x_, y_;在Bjorn的update方法中,我们作如下更新// 根据用户输入修改英雄的速度break;break;// 根据速度修改位置。原创 2023-10-09 19:09:11 · 430 阅读 · 0 评论 -
《游戏编程模式》学习笔记(十二)类型对象 Type Object
那么问题来了,每次你要创造一个新的种类的敌人,即使这些敌人仅仅是名字不一样,其属性和行为都差不多,你都得写代码。实例相关的数据被存储在有类型对象的实例中,被同种类分享的数据或者行为存储在类型对象中。这让我们在一组相同的对象间分享行为和数据,就像子类让我们做的那样,但没有固定的硬编码子类集合。Breed类本质上定义了一个怪物的类型,这就是为啥这个模式叫做类型对象。最容易想到的就是,哦,我先写一个Monster抽象基类,里边定义了基本的属性和抽象方法,然后让子类继承这个基类,来制造特定的敌人。原创 2023-10-08 21:32:56 · 1084 阅读 · 0 评论 -
《游戏编程模式》学习笔记(十二)子类沙箱 Subclass Sandbox
基类定义抽象的沙箱方法和几个提供的操作。将操作标为protected,表明它们只为子类所使用。每个推导出的沙箱子类用提供的操作实现了沙箱函数。原创 2023-09-10 14:14:28 · 462 阅读 · 0 评论 -
《游戏编程模式》学习笔记(十)更新方法 Sequencing Patterns
游戏世界管理对象集合。每个对象实现一个更新方法模拟对象在一帧内的行为。每一帧,游戏循环更新集合中的每一个对象。这个模式的定义十分直观,简单地说,就是我们的游戏世界有一个大循环Update(),而我们在游戏对象中封装一个update()小方法来存储个体的更新逻辑,同时因为封装在了小方法里,我们可以自由地添加一些类变量来帮助我们存储状态。原创 2023-09-10 11:35:35 · 408 阅读 · 0 评论 -
《游戏编程模式》学习笔记(九)游戏循环 Sequencing Patterns
所以有时候会出现渲染在两次更新之间的情况,而这个时候,渲染的往往是前一次更新的时候的情况,这会造成困扰,例如玩家看见子弹在左边,下一次渲染的时候应该在中间但还是显示在左边。在代码中可以看到,这个循环会计算上一次循环到现在间隔的时间,如果间隔时间过长,就会进入里边的小循环,多次调用update方法以追上现实时间。每一次循环,它都会无阻塞地处理玩家的输入,更新游戏的状态,渲染游戏。用真实的时间做循环,每次循环会计算上一次循环到这一次循环所用的时间间隔,然后在update的时候传入这个时间间隔。原创 2023-08-29 11:16:37 · 858 阅读 · 0 评论 -
《游戏编程模式》学习笔记(八)双缓冲模式 Sequencing Patterns
双缓冲模式定义缓冲类封装了缓冲:一段可改变的状态。这个缓冲被增量地修改,但我们想要外部的代码将修改视为单一的原子操作。为了实现这点,类保存了两个缓冲的实例:下一缓冲和当前缓冲。当信息从缓冲区中读取,它总是读取当前的缓冲区。当信息需要写到缓存,它总是在下一缓冲区上操作。当改变完成后,一个交换操作会立刻将当前缓冲区和下一缓冲区交换, 这样新缓冲区就是公共可见的了。旧的缓冲区成为下一个重用的缓冲区。原创 2023-08-24 18:38:22 · 487 阅读 · 0 评论 -
《游戏编程模式》学习笔记(七)状态模式 State Pattern
允许对象在当内部状态改变时改变其行为,就好像此对象改变了自己的类一样。原创 2023-08-19 21:15:22 · 739 阅读 · 0 评论 -
《游戏编程模式》学习笔记(六)单例模式 Singleton Pattern
保证一个类只有一个实例,并且提供了访问该实例的全局访问点。定义这种东西一般都是不说人话的,要想要理解这句话的意思,我们得把它揉开了才能搞明白。我们先看前半句 “保证一个类只有一个实例”,单例一般使用类来实现,也就是说,这个单例类,其有且只能有一个实例化的对象instance,一旦出现多个,就不是单例模式。后半句“并且提供了访问该实例的全局访问点”,这句话的意思是,这个实例化的对象是全局可见的,任何系统,任何类都可以访问这个实例化的单例对象。原创 2023-08-16 20:48:25 · 1292 阅读 · 0 评论 -
《游戏编程模式》学习笔记(五)原型模式 Prototype Pattern
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原创 2023-08-15 18:34:50 · 827 阅读 · 0 评论 -
《游戏编程模式》学习笔记(四) 观察者模式 Observer Pattern
观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这是定义,看不懂就看不懂吧,我接下来举个例子慢慢说。原创 2023-08-15 18:30:28 · 1057 阅读 · 0 评论 -
《游戏编程模式》学习笔记(三)享元模式 Flyweight Pattern
为了减少需要推送到GPU的数据量,我们想把共享的数据——TreeModel——只发送一次。然后,我们分别发送每个树独特的数据——位置,颜色,大小。第一部分是一块需要渲染多次的共同数据——在例子中是树的网格和纹理。我们只需要一个TreeModel实例化的对象就好了,剩下的树只需要保存一个TreeModel的指针,就可以很快的找到这个对象。这就是享元模式,实际上我认为享元模式没有什么好说的东西,所以这里的大部分内容我都是直接照搬原著的。在系统设计中,对象实例进行分类后,发现真正有区别的分类很少的时候。原创 2023-08-04 14:36:33 · 761 阅读 · 0 评论 -
《游戏设计模式》学习笔记(二)命令模式 Command Pattern
采用命令模式后,我们将jump,fire这些方法做成一个抽象类command的子类,这样每个命令就有了面向对象的形式的封装(将命令变为数据对象,让这个对象和其他对象一样可以被存储和传递)2.对于不同的游戏角色,我们因为会往里边传入不同actor的引用,最后调用的是actor中内置的方法(如jump方法),这就实现了不同的角色拥有不同的按键行为。1.对于不同的按键,由于其类型都是command*,我们只需要让这个指针指向不同的子类命令对象,就可以实现按键配置功能了。这个时候我们就需要考虑使用命令模式了。原创 2023-08-04 14:34:39 · 2238 阅读 · 0 评论 -
《游戏编程模式》学习笔记(一) 架构,性能和游戏
开新坑,准备把《游戏编程模式》这本书啃完。这是一本讲设计模式的书,针对游戏开发而作,写得很好。以下是读书笔记,文末有原文链接。原创 2023-08-04 14:31:37 · 569 阅读 · 0 评论 -
【左神算法笔记】Class2,3 各种排序算法总结
快排3.0随机选择的一个数,与最尾巴数字交换,并以这个新的尾巴数字为基准做划分,这样就无法人为构建最差情况,这样时间复杂度就是O(nlogn)归并排序需要借助额外数组完成merge的过程所以空间复杂度为O(n),归并排序的时间复杂度是根据master公式计算的,为O(nlogn)归并排序的时间复杂度是基于master公式算出来的,空间复杂度为O(n),因为merge的时候需要借助额外数组完成。桶排序和之前说的排序不同,其是不是基于比较排序,时间复杂度是O(n),不受O(nlogn)下限的影响。.......原创 2022-07-27 02:24:37 · 600 阅读 · 0 评论 -
【左神算法笔记】Class1:异或交换,时间复杂度计算
因为a^b的后的结果中的那一位为1,这就说明这个位可以将这组数字分为两组,一组里包含a,一组里包含b,那么用eor’与这两组中任意一组相与,一定能得到a或b中的一个。思路首先还是设置变量eor,和之前一样连续数字相与,假设目标数字叫a和b,那么eor最后一定是eor=a^b。下一步,找到eor二进制数字中为1的位,以这个位为基准,再创建一个变量eor’,令eor’=eor’思路设一个变量,例如inteor,将eor连续与每一个数字相异或,也就是eor=eor^a这样。a=a^b即a=甲^乙。........原创 2022-07-26 13:25:24 · 330 阅读 · 0 评论
分享