<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[手机游戏开发学习笔记]]></title><description><![CDATA[图形学,cocos2d-x,unity,unreal.....]]></description><link>https://blog.youkuaiyun.com/bill_man</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bill_man]]></copyright><item><title><![CDATA[性能优化学习笔记（2）-更好地使用字符串]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/158319353</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/158319353</guid><author>bill_man</author><pubDate>Mon, 23 Feb 2026 19:05:24 +0800</pubDate><description><![CDATA[一般来讲，对于一个字符串，有两个信息是必要的，一个是字符串内容，一个是字符串长度，后面的讨论中，也将围绕如何存储和修改这两个元素来展开。这是最常被使用的优化策略，即在对一个字符串进行写入操作的时候再进行深拷贝，也是一种懒处理的思想，除了必要的三个元素，写时拷贝还有一个引用计数的变量，一个新的字符串初始化的时候，该变量为1，每次这个字符串被赋值给其他变量的时候，引用计数加1，在字符串作修改的时候，先进行深度拷贝，再把原来的字符串引用计数减1，当引用计数减为0的时候，释放最初的字符串占用的内存。]]></description><category></category></item><item><title><![CDATA[性能优化学习笔记（1）-缓存系统]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/158290130</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/158290130</guid><author>bill_man</author><pubDate>Sun, 22 Feb 2026 22:37:28 +0800</pubDate><description><![CDATA[面对不同的情况，我们需要不同的手段，这些都是我们手中一些工具：比如并行思想，把一些可以同时进行的工作拆分成不同的线程，用多线程的方式，比如我们需要读取两套不同的配置，而这两套配置互不相关，这时候可以使用多线程的方式，将两套配置的读取拆分到两个线程上，多线程方法和思维在性能优化中是一个很重要的手段，本套学习笔记后续会有很多篇幅介绍C++的并发编程。简单到我们需要一个排序算法，不同算法的时间复杂度是不同的，甚至于面对不同的需求，选择不同的算法会得到不同的时间复杂度。哈希表（频率键值对）]]></description><category></category></item><item><title><![CDATA[RHI学习笔记（2）-Qt6的RHI结构]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/158265341</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/158265341</guid><author>bill_man</author><pubDate>Sat, 21 Feb 2026 22:23:47 +0800</pubDate><description><![CDATA[可以看出五个QRhiImplementation的子类各自有各自的个性接口，也有统一的功能，比如完成一次渲染的pass相关的beginPass和endPass等，处理绘制每一帧的beginFrame和endFrame等，处理计算pass的beginComputePass和endComputePass，如果想学习某一个特殊的图形API，可以以其中的一个类为源码来学习，而Rhi的任务恰恰是把不同图形API的所有概念都统一起来，由外部开发者处理调用，使用QRhi，你只需要了解一套概念即可。]]></description><category></category></item><item><title><![CDATA[RHI学习笔记（1）-初识RHI]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/158208131</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/158208131</guid><author>bill_man</author><pubDate>Thu, 19 Feb 2026 22:53:01 +0800</pubDate><description><![CDATA[和OpenGL堪比一时瑜亮的图形API，但是和OpenGL的跨平台路线不同，DirectX专注于Windows平台，它由微软公司开发并维护，被广泛用于3D游戏的开发，和OpenGL不同，DirectX从设计伊始就采用底层可控的架构设计，减少 CPU 开销，充分发挥 GPU 性能，尤其在多线程渲染和大型场景渲染中优势明显，因此DirectX经常用于大型游戏的开发，同时它也是更现代的图形API。下一篇将从Qt6的源码开始，学习RHI。截止到目前，主要有四种主流的。]]></description><category></category></item><item><title><![CDATA[五年，我决定回来！]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/158100712</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/158100712</guid><author>bill_man</author><pubDate>Sun, 15 Feb 2026 19:32:02 +0800</pubDate><description><![CDATA[这十年，技术的进步和迭代方兴未艾，手机游戏行业经历了蓝海阶段野蛮发展，随着机器性能的提高，3D几乎成为标配，玩家喜欢美轮美奂的画面甚于复杂臃肿的玩法，而经历了刷量等不良竞争和版号限制等，国内游戏行业也逐步向《黑神话》这样的精品化转变，对于团队配合和技术要求都更高了，“不会写代码的美术不是个好策划”不再只是玩笑；”，“我们能做的，就是无论遇到什么情况都要相信自己，不断前进”，剧本和目标我已经找到，未来一年，努力吧！断更的原因很多，工作和生活的压力，其他业余爱好占据了时间，其实严格意义上说，从上一个系列《]]></description><category></category></item><item><title><![CDATA[算法思想-滑动窗口思想]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/113792138</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/113792138</guid><author>bill_man</author><pubDate>Thu, 11 Feb 2021 22:03:26 +0800</pubDate><description><![CDATA[## 算法思想-滑动窗口思想

​    在解Leetcode题的时候，遇到了几个新的算法思想，这个系列文章就把Leetcode中的一些算法思想做一些整理，包括老生常谈的动态规划，也包括我最新接触的滑动窗口思想，并查集等，另外，遇到新的题目的时候也会在这里做一些整理。

##### 起源-计算机网络协议

​    在介绍滑动窗口思想之前，首先介绍这个算法思想的由来，是一种TCP网络协议-滑动窗口协议，其实在大学学计算机网络的时候，自己可能并没有对这个协议有太多的印象，也许是当时用的太少，工作之...]]></description><category></category></item><item><title><![CDATA[Unity学习笔记（2）- MonoBehaviour类的生命周期及脚本报错收集]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/71977115</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/71977115</guid><author>bill_man</author><pubDate>Sun, 14 May 2017 15:23:18 +0800</pubDate><description><![CDATA[在Unity中，脚本的职责就是做GameObject的逻辑驱动，所有需要挂载到GameObject上面的脚本，都需要继承自MonoBehaviour，MonoBehaviour是Unity中所有脚本驱动的基类（当你使用C#作为脚本语言时）。MonoBehaviour有一些事件函数会在特定的时间被调用，Unity的MonoBehaviour脚本的生命周期示意图如下：        需要说明的是，当脚]]></description><category></category></item><item><title><![CDATA[Unity学习笔记（1）-“Hello World”之Unity的调试和log]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/70510894</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/70510894</guid><author>bill_man</author><pubDate>Sun, 23 Apr 2017 18:43:27 +0800</pubDate><description><![CDATA[作为一个合格的程序员，持续保持学习的状态是十分必要，学习3d有一段时间了，期间接触过虚幻引擎，unity等3d引擎，个人的看法是虚幻引擎功能强大，但unity更适合开发手游，想来自己从2011年底开始接触ios游戏开发时就接触过unity，当时因为自己一直在开发2d游戏，且在2d手机游戏开发上，cocos2d-x有着很好的易用性，所以选择了cocos2d-x作为自己的主要开发引擎学习，同时当时的自]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（20）----模型，网格和材质]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51683216</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51683216</guid><author>bill_man</author><pubDate>Wed, 15 Jun 2016 16:58:05 +0800</pubDate><description><![CDATA[openGL在cocos2d-x中的应用点，调用的api基本已经介绍的差不多了，这一篇介绍一些3d游戏中的概念，它们也和底层有一些关系，也是游戏中常用的一些封装。       当我们要在屏幕上绘制简单的图形时，我们直接计算点的坐标就可以，但是游戏世界中经常有些复杂的模型，例如房子汽车等，这些模型一般是用建模工具制作出来，并且导出数据到指定文件中，然后我们游戏中在读取文件把模型渲染出来，一般比较有名]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（19）----旋转表示法]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51682255</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51682255</guid><author>bill_man</author><pubDate>Wed, 15 Jun 2016 15:11:28 +0800</pubDate><description><![CDATA[从数学上表示旋转，可以有三种表示方法：矩阵法，欧拉角法和四元数法，我们之前已经介绍了矩阵法，它有个问题，就是容易造成万向节死锁，所谓万向节死锁，就是当绕一个轴旋转到90度的时候，再绕另外两个轴旋转的结果都是一样的，也就是说少了一个自由度，另外矩阵法其中有无用的数据，造成内存的浪费。       欧拉角法是由欧拉在十八世纪提出，它由三个角表示：俯仰角，yaw偏航角，roll滚转角。struct Eu]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（18）----实例化]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51680687</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51680687</guid><author>bill_man</author><pubDate>Wed, 15 Jun 2016 14:02:36 +0800</pubDate><description><![CDATA[cocos2d-x中的batchNode的方式可以提高相同的纹理的渲染效率，但是它使用的绘制方式还是glDrawElements的方式，它只是把相同的纹理的绘制命令只提交一次，剩下的重复绘制都调用glDrawElements即可，当绘制中的一些参数变化时，使用glMapBuffer获得数据的指针，然后修改数据，代码如下：glBufferData(GL_ARRAY_BUFFER, sizeof(_q]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（17）----发光体]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51673601</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51673601</guid><author>bill_man</author><pubDate>Tue, 14 Jun 2016 18:57:46 +0800</pubDate><description><![CDATA[cocos引擎支持四种发光体：环境光，方向光，点光源和聚光灯，上一篇已经介绍了基本光照模型，其中也介绍了环境光的算法，下面就介绍另外三种光源。       当一个光源很远的时候，来自光源的每条光线接近于平行，这看起来像是来自于同一个方向，比如太阳由于离我们无限远，所以太阳光被定义为平行光，因为所有的光线都是平行的，对场景中每个物体的光都保持一致，光照计算会和场景中的其他物体相似。       点光]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（16）----基本光照]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51668897</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51668897</guid><author>bill_man</author><pubDate>Tue, 14 Jun 2016 11:28:01 +0800</pubDate><description><![CDATA[cocos引擎目前已经支持3d功能，之前在3d教程中介绍了cocos2d-x的3d功能中的光照，但是只是粗略的介绍了四种光源，因为光照的重要性和复杂性，这个系列文章会分两篇介绍光照，本篇介绍光照的基础-ADS模型，下一篇详细介绍几种光源。       ADS模型是光照的基本模型，包括Ambient（环境光），Diffuse（漫反射）和Specular（点光源）三种光照在物体上的效果是这样的：   ]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（15）----帧缓冲]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51655988</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51655988</guid><author>bill_man</author><pubDate>Mon, 13 Jun 2016 11:37:12 +0800</pubDate><description><![CDATA[cocos2d-x中提供一个叫RenderTexture的类，它可以保存屏幕到一张图片，也可以在begin到end之间实现自己的绘制，俨然就是一个独立于屏幕的画布（关于RenderTexture的介绍文章地址：http://blog.youkuaiyun.com/bill_man/article/details/7250911），这个类其实使用了openGL的帧缓冲技术，在调用任何openGL命令之前，首先需]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（14）----深度测试]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51655198</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51655198</guid><author>bill_man</author><pubDate>Mon, 13 Jun 2016 10:29:12 +0800</pubDate><description><![CDATA[深度测试类似于颜色缓冲（颜色缓冲存储片元颜色），深度缓冲是由窗口系统自动创建的，它储存着16、24或32位的浮点数的深度值。在大多数系统中，是24位的。     当深度测试开启时，openGL会用每个片元的深度值和深度缓冲的值对比，执行一次深度测试，如果测试通过，深度缓冲就会用深度值更新，如果深度测试失败，则片元就被抛弃。深度测试是在像素着色器运行后，模板测试完成后，在屏幕空间中完成的。屏幕空间坐]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（13）----模板测试]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51644216</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51644216</guid><author>bill_man</author><pubDate>Sun, 12 Jun 2016 10:54:03 +0800</pubDate><description><![CDATA[像素着色器调用完成后。模板测试就开始了，它可以丢弃片元，模板缓冲在渲染时获得有意思的效果。     模板缓冲中一个模板值有8位大小，每个窗口都会创建一个默认的模板缓冲，它可以通过数据控制屏幕显示，从而形成了显示裁剪的效果，如图所示。]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（12）----立方体贴图和天空盒]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51636932</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51636932</guid><author>bill_man</author><pubDate>Sat, 11 Jun 2016 16:51:29 +0800</pubDate><description><![CDATA[本篇介绍3d游戏中的天空盒概念，天空盒就是游戏中的背景，它是一个包裹整个场景的立方体，它由六个图像构成一个环绕的环境，给玩家一种所在场景比实际上大得多的感觉，如下图所示。       创建天空盒的方法和创建其他节点一样调用create函数，那我们看看create函数里到底做了什么？bool Skybox::init(const std::string& positive_x, const std:]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（11）----摄像机]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51635594</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51635594</guid><author>bill_man</author><pubDate>Sat, 11 Jun 2016 11:30:19 +0800</pubDate><description><![CDATA[本篇文章介绍一个在游戏中的重要概念，在MVP矩阵中，视图矩阵和投影矩阵都和摄像机有关，说句白话，摄像机其实就是生成投影矩阵和视图矩阵的方式和原因，cocos2d-x中使用GamePlay3D类的Mat4类生成各种矩阵，一下就通过分析摄像机Camera类的代码来看这些矩阵是如何生成的。       首先来看正交矩阵的初始化代码：bool Camera::initOrthographic(float ]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（10）----MVP矩阵]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51626642</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51626642</guid><author>bill_man</author><pubDate>Fri, 10 Jun 2016 12:35:39 +0800</pubDate><description><![CDATA[上一篇介绍了openGL的变换和坐标系，本篇就介绍游戏引擎中一个重要的概念-MVP矩阵，首先涉及到透视投影和正交投影的概念，关于这个概念请参考之前的文章（文章地址：http://blog.youkuaiyun.com/bill_man/article/details/48199593），其中介绍了透视投影和正交投影的概念。       上一篇文章介绍了MVP矩阵的概念，但是并没有在代码上涉及。        ]]></description><category></category></item><item><title><![CDATA[cocos2D-X源码分析之从cocos2D-X学习OpenGL（9）----变换和坐标系统]]></title><link>https://blog.youkuaiyun.com/bill_man/article/details/51619857</link><guid>https://blog.youkuaiyun.com/bill_man/article/details/51619857</guid><author>bill_man</author><pubDate>Thu, 09 Jun 2016 11:03:42 +0800</pubDate><description><![CDATA[本篇会介绍openGL中的变换和坐标系统，由于篇幅的问题，本篇文章不会把重点的笔墨放在数学基础，如果对数学概念有疑问的读者可以翻一下大学的线性代数教材。       首先是向量的概念，向量是既有大小又有方向的量，他可以用带箭头的线段形象的表示，在openGL中，向量在计算光照上有非常大的作用，这点后面的文章会详细介绍。需要注意的是，在openGL中我们提到的向量常常是标准化向量，那什么是标准化向量]]></description><category></category></item></channel></rss>