自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Shader开发实战》-笔记

在计算机图形学中,一般使用归一化的颜色,即颜色的数值范围在[0.0,1.0]内。但是我们平常在使用颜色的过程中,对于rgba的取值范围都是[0,255]的,如果将它们转化为归一化的颜色呢?除以255不就好了吗?才开始写着色器代码的时候,对于颜色数值的取值定义我也很懵逼。

2024-01-09 18:20:16 1401

转载 字典树、前缀树

字典树”也被称为“前缀树”,它可以利用公共前缀、已知信息从而实现快速的插入、查找功能,从而降低了算法的时间复杂度和空间复杂度。例如在文字游戏的开发过程中,判断某一个单词是否存在于词库文件中,最常见、无脑的方式就是采用for循环进行挨个对比。这种暴力算法的效率极低,此时我们便可以使用“字典树”的优势来解决我们需要处理的问题。在游戏开发中经常遇到的一种情形是:给出一系列的奖项以及对应的权重,随机生成一个数,通过权重来确定要给与哪一个奖项。

2023-11-13 09:13:53 202

原创 KMP模式匹配算法

KMP模式匹配算法让主串不发生没必要的回溯,即主串的索引值只做递增操作。如果主串的索引值不发生回溯,那么就需要子串索引值的回溯变化。子串索引值要以一种怎样的形式就行变化呢?子串索引值的变化方式只和子串自身有关系,而且索引值的变化取决于当前字符之前的串的前后缀的相似度。我们以next数组表示串的相似度。next数组的本质就是寻找子串中相同前后缀的长度,以此来表达匹配过程中需要跳过的字符个数。即根据已经掌握的信息来避免重复运算。

2023-08-06 16:02:02 362

转载 字符编码详解:ASCII、GB2312、GBK、Unicode

2023-02-04 16:17:35 4202

原创 JS扩展运算符(...)的用法

JS扩展运算符(...)的用法

2023-01-31 09:28:55 1632

原创 TypeScript接口——interface

TypeScript中的接口——interface

2022-10-29 14:59:44 623

原创 JavaScript异步编程:Async、await与Promise

JavaScript异步编程

2022-10-12 08:30:56 3584 2

原创 JavaScript的运行机制

JavaScript的运行机制

2022-10-10 08:01:38 3698

原创 JavaScript定时器

JavaScript中的定时器

2022-10-10 07:52:12 347

原创 VsCode中搭建TypeScript调试环境

无摘要

2022-09-15 23:00:34 13005 11

原创 工厂方法模式

...

2022-05-09 21:51:24 303

原创 简单工厂模式(静态方法模式)

一、参考链接: 作者在学习简单工厂模式的时候主要是基于该片文章的理解来的,所以将原文链接贴上:参考链接,但是原文中并非使用C++来实现的,基于作者使用的编程语言与原文的差异,以及加深理解的目的写了此篇文章,如有侵权,请联系删除。二、什么是简单工厂模式:简单工厂模式又被称为静态方法模式,因为工厂类提供了一个静态方法给客户使用,这样一来便可以将“类的实例化操作(类定义)”与“类对象的使用”进行分离,客户在使用的过程中不必关心具体的实现过程,只需要知道如何操作对象即可...

2022-05-06 22:41:29 554

原创 cocos2dx-标签:Label的使用

一、setContentSize与setDimensions对于Label的作用1、首先看看setContentSize的定义:/** Set the untransformed size of the node.* 设置节点转换前的大小* The contentSize remiains the same no matter the node is scaled or rotated.* 无论缩放还是旋转节点,它的contentSize始终保持不变* All nodes has a s

2022-04-04 16:12:42 3948

原创 cocos2dx中的定时器

一、默认的定时器1、定时器函数update(1)每一个节点都有一个默认的update函数,该函数继承与父类,因此当我们使用默认的update函数时需要对它进行重写。// 重写默认update函数virtual void update(float dt);(2)函数参数解释: update函数里面有一个float dt的参数,这个参数的意义是上一次调用这个函数到本次调用这个函数中间间隔了多少秒。 对于这个函数参数的意义需要注意一下,游戏设计的过程中通常需要注意到这一点。例如:如果在upd

2021-12-26 16:19:52 2445

原创 SVN学习:SVN的下载安装

一、SVN的安装1、下载SVN安装包 首先在本地电脑上安装SVN服务器与客户端,安装包可以去官网下载或者从我的百度网盘中直接提取。两个获取方法的链接地址如下所示:1、官网地址: SVN服务器下载地址:https://www.visualsvn.com/server/download/ SVN客户端下载地址:https://tortoisesvn.net/downloads.html 2、百度网盘地址: 链接:https://pan.baidu.com/s/1yDA3_IjYMDiGxElu

2021-11-16 23:43:19 6086 1

原创 cocos2dx学习(一):裁剪节点(ClippingNode)

说明:本文主要是参考了一下的博文内容:参考链接

2021-10-09 09:59:50 2466 1

转载 C++ rapidjson基础学习

2021-09-21 08:51:44 1782 1

原创 cocos2dx项目中接入FairyGUI

一、参考链接本篇文章参考链接二、新建cocos2dx项目1、找到cocos2dx的项目创建脚本文件: 以官方的cocos2d-x-3.17.2为例,项目创建的脚本文件在该目录下:cocos2d-x-3.17.2\tools\cocos2d-console\bin,名为cocos.py的脚本,在命令行窗口运行该脚本,创建cocos2d项目,如下图所示:new:项目名称-l:用什么语言,cpp表示使用C++语言-d:表示项目的存放目录创建结果如下:三、接入FGUI1、libfai

2021-07-05 20:45:53 2596

原创 C++对JSON文件的读写

说明:本篇文章主要参考了如下博主的内容,地址附上:一、JSON文件简介1、什么是JSON文件? JSON文件是一种文本文件,一种配置文件,它具有严格的编写规则,这样可以是使用者更好的阅读和使用该类型文件。它的编写规则如下:JSON文件使用花括号括起来,代表一段数据,这段数据里面可以有多个字段。每个字段的结构有点类似于Map容器,一个key对应一个value。字段名必须用双引号包围,而字段的值可以是多种类型,例如浮点型、整形、字符串类型,甚至可以是一个新的数据段,就数据的嵌套。2、JSON文

2021-07-04 14:58:44 20102 4

原创 C++读写文件

一、C++的IO类1、IO类的基本介绍 平常我们使用C++的IO操作大多都是操作char类型的数据,在默认情况下这些对象都是关联到用户的控制台窗口的。例如从键盘输入数据,然后赋值给某一个变量。但是实际的应用程序不仅仅是从控制台进行IO操作,通常还会读写命名文件,操作string类型中的字符等等。 为了支持不同种类型的IO处理操作,在常见的istream和ostream外,C++的标准库还定义了一些其他的IO类型。他们分别定义在三个头文件 中:iostream头文件用于...

2021-07-03 15:53:52 554

原创 C++中的函数重载、重写(覆盖)、隐藏

一、函数重载1、什么是函数重载 函数重载是在同一作用域内(不可以跨越类),函数名相同、参数的个数、类型、先后顺序至少有一个不同的函数被称为重载的函数。在类中const成员函数与非const成员函数也可以构成重载的关系。1、重载函数的作用: 在C++中进行函数的重载,可以解决具有功能相似但是函数参数不同导致的函数命名困难的情况。在C++中通常用来对类的构造函数进行重载。2、返回值类型与函数重载的关系: 注意:函数的返回值与函数重载没有任何关系,对,没有任何关系。函数重载要求的是函数名相同、

2021-03-26 06:55:33 522

原创 深拷贝、浅拷贝和深赋值、浅赋值

一、深拷贝与浅拷贝 由系统提供的默认拷贝构造函数的实现是浅拷贝,浅拷贝是简单地对成员变量逐个进行拷贝赋值,一般不需要用户自定义浅拷贝构造函数,系统会提供默认的浅拷贝构造函数。但是有时系统提供的浅拷贝构造函数是无法满足实际的编程需求的,因此可能需要用户自己定义拷贝构造函数。1、浅拷贝存在的问题 当类中包含指针型成员变量,并且在构造函数中为该指针型成员变量通过malloc函数或new运算符在内存中开辟空间时,会出现double free的现象。分析:1、浅拷贝把指针型成员变量的值拷贝赋值给同

2021-03-25 08:14:58 1042

原创 友元、运算符的重载

一、友元函数和友元类1、友元函数 在C++中我们我们通常可以将全局函数或者类的成员函数声明为类的友元函数,这样友元函数便可以访问类对象中的私有成员。我们可以用friend关键字将其声明为友元函数。1、将全局函数声明为类的友元函数 以friend关键字声明的全局函数称为类的友元函数,友元函数可以通过类对象访问它的私有成员。可以在类内对全局的友元函数进行声明,在类外对其进行定义。(也可以在类内对全局的友元函数进行定义,此时它仍然为全局函数)。2、将一个类的成员函数声明为另一个类的友元函数

2021-03-25 07:49:42 2265

原创 自定义string类,并完成相应功能的实现

自定义一个String类,并完成无参构造函数、有参构造函数、拷贝构造函数、赋值运算符重载函数、析构函数“+”运算符重载函数、输入运算符重载函数、输出运算符重载函数:1、实现代码如下:运行结果如下:...

2021-03-24 14:06:19 213

原创 3、基于流式套接字——TCP网络编程

**关于TCP编程中的流式套接字说明** TCP编程中的流式套接字sockfd分为两种类型:主动生成和被动生成。主动生成是指通过socket函数生成的流式套接字。服务器端通过socket函数创建的流式套接字通过bind函数变为监听套接字之后用于监听和接收客户端的连接请求;客户端通过socket函数创建的流式套接字用于向服务器发送连接请求。被动生成的套接字是当客户端向服务器发送连接请求之后,服务器通过accept函数接收连接请求时返回的通信套接字,它主要用于服务器与客户端之间的通信息。 监听套接字

2021-03-20 15:09:59 1490

原创 1、网络编程基础

一、网络体系结构 网络体系结构是指网络的分层结构以及每层使用的协议的集合。其中比较知名的是IOS协议参考模型和TCP/IP模型,OSI模型由于太过于复杂而没有得到广泛的应用,而TCP/IP对其进行了简化,从而更有利于实现高效的通信。1、OSI参考模型OSI参考模型主要分为7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。其参考模型如下图:(1)应用层1、应用层是面向应用程序的。如QQ、微信等。2、相关协议:FTP 文件传输协议。其中包括两个部分,FTP客户端和FTP服

2021-03-18 14:02:34 233

原创 2、TCP的三次握手与四次挥手

一、TCP的报文格式:序号 Seq序号,是发送端对发送数据包的标识确认号 Ack序号,标识发送端希望接收到的下一个数据包的序号,一般Ack = Seq +1。标志位 ACK,表示TCP数据包的确认号有效 SYN,表示该TCP数据包用于发送一个连接请求 FIN,表示该TCP数据包用于请求断开连接。二、TCP的状态机:LISTEN 是服务器端监听请求队列时的服务器的状态机SYN_SENT 发送完一个连接请求后等待一个匹配的连接请求SYN_RECEIVE 接收到连接请求并且发

2021-03-18 10:03:46 192

原创 Linux进程间通信——信号通信

一、基本概念1、中断: 在程序执行过程中,插入了另一段程序的执行过程。该段程序执行结束后回到中断点继续执行原来的程序。2、同步通信与异步通信:同步通信:发送方发送数据,接收方接收数据,双方在很短的时间内完成数据的交换,否则会造成一方的阻塞。所以 同步通信是一种阻塞模式的通信。异步通信:通信中接收方并不知道数据什么时候会到达,当前进程一直准备接收数据,同时也在做自己的事情,一旦 数据到达立即接收处理。3、信号是一种异步通信方式,信号是在软件层次上对终端机制的一种模拟。同时,信号是进

2021-03-14 13:04:35 667

原创 八大排序算法

一、冒泡排序思路:每进行一趟排序,将未排序序列中的最大值放在未排序序列的末尾,未排序序列数减一。(1)假设未排序序列的长度为len,则需要对序列进行 len-1 次排序,假设i表示需要进行排序的趟数。(2)每趟排序都需要进行 len-i 次两两相邻比较 二、简单选择排序思路:把未排序的第一个数视为最值(最大或者最小值),把其后的每一个数依次与该数进行比较。一趟排序完毕后,得到未排序序列的最值(最大或者最小值),把其放在未排序的最小下标出。(1)假设未排序的序列长度为len,则需要对序列进行

2021-03-13 19:38:31 151

原创 Linux下进程间通信——管道

现在在Linux系统下进程之间的通信方式有如下几种:管道通信(有名管道、无名管道),信号通信,消息队列,共享内存,信号灯以及套接字(socket)通信。但是由于socket套接字通信主要涉及的是两台主机之间的网络通信。一、管道通信 管道是Linux下进程间通信方式的一种,管道类似于文件,但是与文件不同点在于:管道里的数据被读取之后就不存在了,而文件里的数据被读取之后依然存在。Linux管道主要包括两种:无名管道和有名管道。管道读写时需要注意:1)读端未打开时,写阻塞;读写端都打开时,无数据.

2021-03-13 14:37:32 727

原创 线程

线程 线程是程序一次动态执行的过程,线程是一种轻量级的进程。线程可以对进程的内存空间和资源进行访问,并与进程中的其它线程共享。 一个进程可以拥有多个线程,其中所有的线程共享该进程所拥有的资源,因此任意线程对系统资源的操作都会给其它线程带来影响,因此在多线程编程中的同步是一个非常重要的问题。一、线程编程相关函数 线程的创建需要调用第三方的线程库中的库函数,因此需要包含头文件"#include <pthread.h>",同时在编译程序时需要链接线程库“-lpthread”。1、线

2021-03-13 10:19:44 152

原创 进程

进程编程一、进程、程序1、程序: 程序是保存在磁盘中的可以实现某个独立功能的代码块,它包含代码和数据,是静态的,没有运行的。2、进程: 进程是程序的一次动态执行过程,包括了动态的创建、调度、执行和消亡的过程。进程是操作系统进行资源分配和调度的基本单元。二、Linux系统下进程的结构 进程不断包括代码和数据还包括系统资源,如程序计数器PC(存放下一条指令的地址)、处理器、寄存器、以及存储临时数据的堆栈等。1、task_struct结构体 Linux是一个多任务的操作系统,所以进程必

2021-03-10 22:28:11 175

原创 Linux下的函数库及其制作

函数库中存放了大量函数的二进制文件,可供用户进行调用。在Linux系统下有两种函数库:静态库和动态库。一、静态库(.a后缀)与动态库(.so后缀)的区别1、用户使用库的时刻不同: 静态库是用户在编译时进行调用;动态库是用户在进行程序时调用。2、使用场合不同: 静态库适用于代码量小的应用程序;动态库适用于代码量大的应用程序。3、静态库与动态库的优缺点:1)静态库: 如果调用静态库中的函数,则在“编译”时会把静态库中相关代码复制到可执行文件中。优点:可执行文件中包含相关代码,运行时不.

2021-03-08 21:26:15 253

原创 IO操作:文件IO

一、系统调用系统调用实际上是操作系统(内核)提供的供用户使用的接口函数。二、标准IO函数和文件IO函数的关系 标准IO是C库内定义的函数,是凌驾于系统之上的,适用于任何的操作系统;文件IO是由Linux系统提供的,只能在linux系统中使用,而不可以在其它操作系统中使用。标准IO函数可以调用文件IO函数。三、文件描述符 文件描述符是Linux内核用来标识一个打开的文件的符号,是一个非负整数;文件流指针是内存用来标识一个打开的文件的符号。FILE*文件流指针文件描述符文件描

2021-03-08 18:26:29 180

原创 IO操作:标准IO

标准IO一、IO IO是输入输出的意思,是对文件的输入输出操作。文件存放在磁盘中,而内存只用于进行数据的处理,不可以用用于存储文件。IO的作用用于将内存中的数据,写入磁盘中,以此将文件存放在磁盘上。二、IO对象1、Linux系统的文件类型: 在Linux系统下存在“一切皆文件的思想”,即把Linux中的所有内容都是做为文件。因此Linux系统下有7种类型的文件:1)普通文件 -2)目录文件 d3)链接文件 l (相当与Windows下的快捷方式)4)块设备文件 b5)字符设备文件

2021-03-08 13:46:22 206

原创 泛型编程——标准模板库STL

泛型编程——标准模板库STL

2021-03-05 14:04:57 182

原创 单例模式

设计模式——单例模式 单例模式是一种常见的软件设计模式,要求类只允许存在一个实例。许多时候系统只需要拥有一个全局的对像,这样有利于我们协调系统的整体行为。比如说在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务器进程的其他对象再通过这个单例对象获取配置信息,这种情况下简化了复杂环境下的配置管理。基本思路: 单例模式要求在创建类对象时永远得到的是同一个类对象,同时还有一个获取该实例对象的方法(必须是静态方法)。1)将构造函数私有化,使其不能够

2021-03-05 14:04:21 93 1

原创 extern “c“

C++的语法进阶一、extern "C" 在C++代码中调用C编译器生成的.二进制文件时,需要用extern "c"修饰C语言函数的声明。用法:extern "c"{ #include "clib.h"}作用:告诉C++编译器按C语言的规则去链接相应的C函数。C语言编写的代码 || C代码的.h文件 #include <stdio.h> || #ifndef _HEAD_H_ || #define _HEAD_H_int add(int a, int

2021-03-05 10:03:37 95

原创 C/C++中const关键字剖析

C/C++中const关键字剖析一、const修饰普通变量 const修饰普通变量时是很容易理解的,就变量的值不可以改变。但是在C和C++中还是有区别的,同时const修饰的普通变量在不同的存储区域时也有不同的效果。1、C和C++中const修饰的普通变量的区别 const int val = 10; <==> int const val = 10; 上述两个变量的定义实际上是等价的,其中的const修饰的是变量val。表示变量val的值不可以进行改变,但是val的值一定就

2021-03-04 12:51:00 137

原创 C++的异常处理机制

C++的异常处理机制一、异常事件 程序在运行时发生了错误也叫作发生了异常事件,简称发生了异常。常见的异常事件有:除数为零、越界访问、访问空指针等。如果不在代码中针对可能出现的异常事件提供处理预案,程序可能无法运行甚至崩溃。二、异常的处理 异常处理是C++处理异常事件的一种机制,异常事件被处理后程序可以正常运行,异常处理的方法由程序员自己定义。 C++对异常事件的处理会转化为异常表达式的处理,异常表达式是一个携带异常事件信息的表达式。异常处理表达式的语法如下:throw e;//抛出异

2021-03-04 12:49:53 698 1

空空如也

空空如也

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

TA关注的人

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