- 博客(38)
- 收藏
- 关注
原创 关于代码实现的一些思考总结
一.为什么需要面向对象思想二.lua中如何实现面向对象三.什么是类四.如何构建一个类五.几个原则六.设计模式思想的应用实例分析七.lua层实现业务逻辑的特殊情况以及解决方式总结:目标是什么,效率,准确率,扩展性,debug方便...
2021-03-12 11:42:22
1440
原创 如何让自己变得更好,以及如何避免让自己废掉的思考
负状态的几个特点: 追求短期的快感,无法延时满足 无意识的追求短暂的快感,短暂的成就感,下意识的摄取一些推荐的热点爆点,爽点,不思考,不控制自己的信息摄入 不自我思考,没有自己的观点和态度,人云亦云 错位成就感麻痹自己,往下看来寻求自我安慰 遇事逃避,拖延,期望别人去解决 过多的内耗,遇事处理不果断,瞻前想后不行动,顾此失彼不作为 如何变得更好:精简念头,少欲则刚一次只做一件事,专注当前,专注眼下事 明确自己在一个的时间范围内想要的是
2020-10-09 17:44:11
263
原创 游戏开发中“高质量代码”的个人理解,以及如何尽量写出高质量代码
1.高质量代码应该有的特点首先是高效前置技能:《CLR VIC C#》《Lua程序设计》《Effective C#》在足够了解使用语言的底层实现以及计算机CPU,内存运行调度的原理的情况下,写出更快,占用内存更小,GC更不频繁的代码2.还应该具备的几个特点是结构清晰,可扩展,可维护性高前置技能:《设计模式》《面向对象》 Unity游戏中常用系统的类型划分以及组合方式通过对以上技术的了解以达到代码结构清晰,扩展方便,维护方便,高内聚,低耦合...
2020-09-25 16:17:53
261
原创 如何阅读自己不熟悉的代码模块(主要针对偏大型项目)
通过近期的工作和学习实践过程,梳理一下自己在阅读一份不熟悉的代码模块的时候的执行步骤,算是做一个方法的总结吧第一步:明确这部分代码模块的职责是什么,设计目的是什么不管是阅读源码还是接手前人代码,首先要明确,想要了解的这部分代码他的作用是什么如果一开始完全没有接触过类似的模块,心里没有对这个模块的一个大致的概念,那首先要做的是先去查资料,查文档,看论坛,找相关的文章去学习了解这方面的知识,对这个模块建立一个概念认知以及大致的对象拆分,拿mmo的技能模块为例,我开始完全不知道要如何去构建一.
2020-07-30 22:06:09
594
原创 《设计模式与游戏完美开发》——TemplateMethod
定义:在一个方法中定义算法的流程,其中某些步骤由子类来完成。定义算法的流程:明确算法的每一个步骤,这个步骤可以是一个方法调用,并且都写在父类中思考:为什么某些步骤需要由子类来实现?在算法的流程中,某些步骤需要由执行时候的“上下文环境”来决定UML:具体步骤在子类中重写,声明一个父类对象,实例化为子类类型,调用父类模版方法,此时实现间接调用子类重写步骤的目的。优点...
2019-11-13 18:14:36
863
原创 《设计模式与游戏完美开发》——Strategy
定义:定义一组算法,并且封装每个算法,让他们可以彼此交换使用UML:思考:相当于把“解决问题的算法”抽象成“策略”的概念,当客户端需要调用这个算法的时候,对要使用的算法进行设置,然后调用其统一的接口,来实现调用不同解决算法的需求。同状态模式的区别:状态模式UML从类图上来看,很相似,但是不同的地方在于:状态模式中的每个状态之间是有对应的连接关系的,虽...
2019-11-12 16:44:27
428
原创 《设计模式与游戏完美开发》——Bridge
定义:将抽象与实现分离,使二者可以独立的变化桥接模式和传统的依赖于接口,不依赖于实现的模式(即通过继承的方式实现功能)有区别。通过继承的方式实现功能当俩个类组群自建,关系呈现出交叉组合的情况,采用继承的方式实现就会产生如下的情况,每个实现都需要新派生出一个子类来进行重写实现。通过桥接的方式实现功能通过桥接的方式来实现,则是先把俩个组群的顶层抽象出来,然后在顶层包含引...
2019-11-11 16:52:15
1569
原创 UI模块设计——想法记录
第一步:分析需求这个过程主要是把一个具体的目标从开始到结束的过程预演一遍第二步:抽象对象通过第一步的过程预演,把这个过程中涉及到的对象抽象构建出来第三步:接口出发,设计对象在第二步的基础上,分析每个对象需要具有何种行为,何种数据第四步:伪代码实现每个行为划分好行为之后,通过伪代码的形式去规划实现方式第五步:实现代码实现行为实现之后不断迭代重构 2 ~ 5 步...
2019-10-30 17:54:24
1061
原创 《设计模式与游戏完美开发》——Mediator
用于解决内部子系统之间的沟通中介者模式:建立一个信息集中的中心,任何子系统要与他的子系统沟通时,都必须先把请求交给中央单位定义一个接口来封装一群对象的互动行为,中介者通过移除对象之间的引用,来减少他们之间的耦合,并且能改变他们之间的互动独立性相当于把原本多个类之间的联系变成了多个类和一个统一的类联系,然后通过调用这个统一的类来操作这些联系。...
2019-10-09 17:17:17
132
原创 《设计模式与游戏完美开发》——SingleTon
确认一个类只有一个对象,并且提供一个全局方法来获取这个对象单例模式的俩个重要特性是1.唯一的对象2.容易获取对象其中唯一对象特性可以通过类内提供计数来实现。容易获取的特性可以通过依赖注入的方式,把某个类对象设置成其他类的成员,可以实现容易获取对象的需求。当俩个需求都有的时候再考虑用单例模式...
2019-09-29 17:13:47
618
原创 财务知识入门——《富爸爸,穷爸爸》
为钱而工作?让钱为自己工作!恐惧感:没钱的恐惧会刺激我们努力工作贪欲:当我们得到报酬时,贪欲又开始让我们去想所有钱能买到的东西别让感情代替了思想:感情,生活的压力推动了自己的行为,没有思考的行动是错误的方式恐惧和欲望造成贫穷和财务问题的主要原因是恐惧和无知,而非经济环境,政府,或者富人恐惧让人缺乏思考走上了被迫的道路欲望又让这条路越走越深,深陷其中无法自拔学...
2019-09-25 17:58:41
254
原创 我的知识网络结构图(2019)
总结:基础知识:通过读书,补充计算机基础知识,C#和lua的细节知识点 框架:通过阅读源码,体会GF,MVVM框架思路,XADStory模拟练习 引擎工具:通过XADStory具体需求的实现,练习Unity各个系统的实际用法,常用插件用法 Code Ability:通过leetcode,补充数据结构,算法,逻辑思维 Exam Ability:通过牛客网笔试题,面经,补充求职笔...
2019-09-23 18:47:15
1348
原创 Unity摄像机惯性滑动效果实现(附demo)
实现鼠标在屏幕上拖拽,物体或者摄像机惯性滑动的效果:问题分解:在惯性滑动效果中,鼠标拖动物体移动分为俩个阶段drag移动阶段,此时鼠标或者手指未离开屏幕,物体跟随手指移动 惯性移动阶段,此时物体继续保持一个速度,并且速度持续衰减直到速度等于0,相当于做一个减速运动所以有伪代码:if(drag移动){ //获取鼠标位置 //物体移动到鼠标位置}else{...
2019-09-01 13:05:21
4606
6
原创 《游戏编程算法与技巧》读书笔记——3D图形
坐标系在3d渲染管线中,渲染3d模型到2d显示器,必须经历四个主要的坐标系空间模型坐标系模型坐标系是相对于模型自身的坐标系,原点一般在模型中心点世界坐标系坐标原点在世界的原点齐次坐标系当4D坐标应用在3d空间中时,他们被称为齐次坐标系。第四个分量为W当W = 0时,齐次坐标是3d向量当W = 1时,齐次坐标是3d点矩阵变换矩阵变换就是矩阵用某种...
2019-08-21 18:38:52
532
原创 《游戏编程算法与技巧》读书笔记——摄像机
摄像机的类型固定摄像机:永远在一个位置固定的摄像机 第一人称摄像机: 跟随摄像机:固定距离,弹性距离,跟随过程中旋转 场景切换摄像机:从玩家的摄像机切换到剧情摄像机透视投影视场观看世界视野的广度及角度,称为视场,FOV视场过大会出现鱼眼效果,屏幕边缘变得弯曲。宽高比观看世界视口的宽度和高度的比率。摄像机的实现跟随摄像机弹性跟随摄像机旋转摄像机...
2019-08-08 15:22:22
176
原创 《游戏编程算法与技巧》读书笔记——游戏中的线性代数
游戏中的线性代数向量加法:减法:指向被减向量用法:(玩家到达目的地之间的向量)target = destination.position - player.position长度单位向量长度为1的向量正规化(非单位向量转化为单位向量)叉乘(标量相乘,运算结果为向量)标量*向量 可以改变向量方向点乘(运算结果为标量)...
2019-08-02 10:58:49
1496
原创 Unity练习项目——思考记录
游戏脑图如下:第一步:让主角动起来学习练习:动画系统的相关知识目标:实现基本的人物控制 走,跑,跳,动作切换和融合,IK第二步:人物控制状态机,摄像机控制练习:FSM有限状态机模式,摄像机控制,向量矩阵运用目标:人物控制,摄像机控制,easytouch移动端控制...
2019-07-18 15:36:36
466
原创 《大话数据结构》读书笔记——排序算法
第九章:排序内排序和外排序排序算法性能影响条件:时间性能:尽可能少的比较次数和移动次数 空间性能 算法本身的复杂性冒泡排序(n²)简单选择排序(n²)直接插入排序(n²)希尔排序(nlogn)堆排序(nlogn)堆是具有以下性质的完全二叉树:每个节点的值都要大于或者等于其左右孩子节点的值,称为大顶堆每个节点的值都小于或者等于其左右孩子节点的值,称为小顶堆...
2019-06-25 15:47:51
155
原创 Unity Documentation 笔记 —— 导航和寻路
Unity导航系统首先要考虑的俩个问题如何根据地图信息来寻找目标位置 如何移动到目标位置
2019-06-19 15:00:22
1651
原创 《大话数据结构》读书笔记——查找算法
第八章:查找查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素查找概论查找表:同一元素数据构成的集合关键字:数据元素中某个数据项的值分类静态查找表 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从数据表中删除已经存在的某个数据元素为了提高查找效率,需要专门为查找操作设置数据结构,这种面向查找操作的数据结构称为查找结构。...
2019-05-20 15:35:35
204
原创 《大话数据结构》读书笔记——图结构
第七章:图基本概念:图是由顶点的有穷非空集合和顶点之间边的集合组成的,通常表示为:G(V,E),其中,G表示一个图,V是G图中顶点的集合,E是图G中边的集合概念区别:线性表中数据叫元素,树形结构中数据叫结点,图中数据叫顶点。 线性表和树种都可以没有数据,但是图中不行必须有 图中任意俩点之间都可能有关系,顶点之间的逻辑关系用边表示,边集可以是空定义:无向边:顶点Vi到...
2019-05-09 13:54:07
317
原创 《大话数据结构》读书笔记——树形结构
目录第六章:树结点分类结点关系其他概念树的存储结构双亲表示法孩子表示法孩子兄弟表示法二叉树特殊二叉树二叉树的性质二叉树的存储结构遍历二叉树二叉树的建立线索二叉树树,森,二叉树的转换树转换为二叉树森转换为二叉树二叉树转换为树二叉树转换为森树和森的遍历(一般转换成二叉树,然后用二叉树的遍历方式进行遍历)...
2019-05-07 13:30:44
654
原创 《大话数据结构》读书笔记——线性数据结构
目录第三章:线性表顺序存储结构(数组)链式存储结构单链表静态链表循环链表双向链表第四章:栈和队列栈(类比手枪弹夹)栈的应用1——递归栈的应用2——公式解析队列(类比排队)第五章:字符串朴素模式匹配算法KMP模式匹配算法第三章:线性表0个或多个数据元素的有限序列顺序存储结构(数组)用一段地址连续的存储单元依次存储线性表...
2019-05-06 14:35:38
534
原创 《大话数据结构》读书笔记——绪论
第一章:数据结构绪论数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:组成数据的有一定意义的基本单位数据结构:是相互之间存在一种或者多种特定关系的数据元素集合数据结构分类逻辑结构集合结构:关系就是同...
2019-05-06 10:11:20
192
原创 代码大全读书笔记(第五部分)——代码改善
第二十章: 软件质量概述20.1 软件质量的特性外在特性:正确性 可用性 效率 可靠性 完整性:包括输入数据验证 适应性 精确 健壮内在特性:可维护性 灵活性 可移植性 可重用 可读性 可测试性 可理解性20.2 改善软件质量的技术明确软件质量的目标 明确定义质量保证工作,把保证程序的质量放到第一位 测试策略? 非正式的技术复查:代码都过一遍...
2019-04-26 11:43:23
233
原创 代码大全读书笔记(第四部分)——语句
目录第十四章:组织直线型代码14.1 必须有明确顺序的语句14.2 顺序无关的语句第十五章:使用条件语句15.1 if语句简单if - then 语句if - then - else语句串15.2 case语句为case选择最有效的排列顺序使用case注意事项第十六章:控制循环16.1选择循环的种类什么时候使用while循环什么时候用带退出的...
2019-04-23 10:12:30
199
原创 代码大全读书笔记(第三部分)——基本数据类型
第十二章:基本数据类型12.1 数值概论避免使用神秘数 程序主体中仅能出现的文字量就是0和1,任何其他文字量都应该换成更有描述性的表示 预防除0 使类型转换变得明显 避免混合类型的比较 注意编译器的警告12.2 整数检查整数的除法, 10*(7/10) ≠ (10*7)/10 检查整数溢出 检查中间结果溢出12.3 浮点数float 有效数字8位 占用...
2019-04-22 10:51:56
171
原创 代码大全读书笔记(第三部分)——变量
第十章:使用变量的一般事项此处的变量泛指对象和内置数据类型10.1数据认知10.2轻松掌握变量定义10.3变量初始化原则在声明变量的时候初始化 在靠近变量第一次使用的地方初始化 注意使用final或者const,防止对常量进行赋值 在类的构造函数里初始化该类的数据成员 检查是否需要重新初始化 一次性初始化具名变量10.4作用域作用域或者可见性指的是变量在程序内...
2019-04-16 13:44:16
177
原创 代码大全读书笔记(第二部分)——防御式编程,伪代码编程过程
目录第八章:防御式编程第九章:伪代码编程过程9.1创建类和子程序的步骤概述创建一个类的步骤创建子程序的步骤9.2伪代码9.3通过伪代码编程过程创建子程序编写子程序代码检查代码9.4伪代码编程过程的替代方案第八章:防御式编程//TODO第九章:伪代码编程过程9.1创建类和子程序的步骤概述类的创建是一个迭代的过程,先对一个类做总体设计...
2019-04-12 13:55:14
150
原创 代码大全读书笔记(第二部分)——可以工作的类、高质量的子程序
目录第六章:可以工作的类6.1类的基础:抽象数据类型6.2良好的类接口如何设计类接口良好的封装6.3有关设计和实现的问题包含关系(有一个...的关系)继承关系(是一个...的关系)成员函数和数据成员构造函数6.4创建类的原因第七章:高质量的子程序7.1 创建子程序的理由过于简单的子程序存在的作用7.2在子程序层上设计应该有的内...
2019-04-09 16:59:34
228
原创 代码大全读书笔记(第二部分)——创建高质量的代码
目录第五章:软件构建中的设计设计是一个险恶的问题关键的设计概念理想的设计应有的特征设计的层次第一层:软件系统第二层:子系统第三层:类第四层:分解成子程序第五层:子程序内部的设计设计的方法找出现实世界中的对象形成一致的抽象封装实现细节当继承能简化设计时就用继承信息隐藏找出容易改变的区域保持松散耦合耦合的种类:常用设...
2019-04-03 10:43:48
259
原创 代码大全读书笔记(第一部分)——打好基础
第一章:欢迎进入软件构建的世界第二章:用隐喻来更充分地理解软件开发第三章:三思而后行,前期准备这个系统应该做什么?他该如何做到这些?第四章:关键的构建决策...
2019-04-02 11:42:07
180
原创 Unity打包Android配置步骤
1.安装JDK,并配置环境变量2.安装SDK,选择与jdk匹配的版本3.安装NDK(需要调用C,C++代码需要用到)4.安装AndroidStudio(导出安卓工程后在androidstudio打包apk)...
2019-01-15 14:20:18
1093
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人