自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 游戏开发设计模式--桥接模式

情景现在假设要定义一些图形,这些图形按形状可分为圆形、三角形,按颜色可分为红色图形,绿色图形。直接了当的实现方式根据上述描述分别根据形状、颜色分类一共有四种图形(实现类):红色圆形,红色三角形,绿色圆形,绿色三角形面对变化时: 当新增一种颜色时,每个形状都要新增对应一个实现类,假设有n种形状,m种颜色,需要实现n*m个类,太过繁琐。解决思路: 将颜色作为一个属性组合到形状当中。这时,新增一个颜色或形状时,只需要加对应的一个实现类。桥接模式GOF中的定义: 将抽象与实现分离,使得二者可

2021-11-19 22:18:53 3209 1

原创 游戏开发设计模式--单例模式

单例模式的定义在GoF中的定义: 确认类只有一个对象,并提供一个全局的方法来获取这个对象。为了保证对象是唯一的,一般会私有化构造函数。实现方式单例类主要有两种实现方式,饿汉式和懒汉式。(其实在C#中,懒汉式和饿汉式基本没有什么区别,因为类本身存在类似懒汉式的加载机制,只有在使用时才会被加载。)不管用何种方式实现,都会给外部提供获取唯一对象的方法/属性,外部只需要通过 Singleton.Instance.Function() 的方式就可通过对象调用其中的方法。饿汉式在一开始就实例化好唯一的对象

2021-11-04 16:35:00 374

原创 游戏开发设计模式--外观模式

外观模式的定义外观模式又称门面模式,在GoF的解释是:为子系统定义一组统一的接口,这个高级的接口让子系统更容易被使用。外观模式的思想在生活中很容易遇见,譬如使用计算机,计算机内部含有众多复杂的系统,硬件子系统(中央处理系统、存储系统、输入输出系统等等)和软件子系统,但计算机为用户提供了高级的图形接口,用户只需要简单操作,就能使得各子系统协调运作。外观模式的设计应遵循单一职责原则与迪米特法则。单一职责原则: 一个类应该完成单一的某项功能。各子系统应只负责某一模块的功能的实现。迪米特法则: 类与类之

2021-11-03 14:39:22 2314

原创 Unity透明物体渲染原理概述

深度测试对某个片元进行深度测试: 比较该片元已经存在于深度缓冲区中的深度值,如果当前片元比深度缓存中的深度值距离摄像机更远,说明该片元是被遮挡的,无需参与合并,也就是说这个片元没有通过深度测试。什么是合并: 合并决定了通过深度测试的片元的颜色如何写入到颜色缓存中,如果是不透明物体,直接覆盖掉原来的颜色即可,反之就要和原本颜色缓存中的颜色进行混合后写入。Unity 的渲染流水线中,采用了 Early-Z 技术,即在片元着色器之前进行深度测试,提前知道那些片元是舍弃的,对于舍弃的片元,无需再使用片元着色器

2021-11-02 20:32:43 2665

原创 纪念碑谷复刻教程 - 基于Unity引擎

目录前言视觉错位效果寻路系统可旋转建筑前言之前一直很好奇纪念碑谷的实现方式,最近偶然间刷到了Mix and Jam的视频,根据其提供的视觉错位技术的实现思路,还原了纪念碑谷的第一关。完整项目链接附在文章末尾。最终效果如下视觉错位效果摄像机采用正交投影的方式,可以使得远处和近处的方块大小相同,并且可以让远处和近处的物体错位在一起。3D场景中物体的实际摆放:将Rotator顺时针旋转90度后:然后使用多个摄像机对建筑进行分层渲染,使得在后面的建筑能够渲染到前面建筑的上方。我们对几个区域

2021-10-02 16:45:44 2949

原创 GAMES101-计算机图形学学习笔记-光线追踪

原视频教程链接:https://www.bilibili.com/video/BV1X7411F744光线追踪为什么引入光线追踪?光栅化难以处理一些全局的效果,比如软阴影光滑物体的镜面反射间接光照光栅化效率高,但是质量差,通常用于实时的效果光线追踪质量高,但是效率低,通常用于离线应用光线追踪基于以下假设光线沿直线传播(尽管这是假的)光线之间不会发生碰撞(尽管这是假的)光源发出光线传播到眼睛中(光线具有可逆性,可以逆向从相机发射光线打到物体上反射)Whitted-Styl.

2021-09-30 20:38:08 293

原创 GAMES101-计算机图形学学习笔记-几何

原视频教程链接:https://www.bilibili.com/video/BV1X7411F744几何表示隐式形式:f(x,y,z)=0f(x,y,z) = 0f(x,y,z)=0可以很好地判断一个点是否在几何面上,但是不能很直观地看出几何形体显式形式:f(u,v)=(,,)f(u,v) = (,,)f(u,v)=(,,)通过将u, v坐标映射到x, y, z坐标上,可以容易地给出几何形体,但是难以判断一个点是否在几何面上。隐式几何几何之间可以通过并、交、差的方式得到复杂的几何。.

2021-09-20 17:18:38 239

原创 GAMES101-计算机图形学学习笔记-着色

Bling-Phong反射模型高光(Specular highlights)漫反射(Diffuse reflection)环境光(Ambient lighting)着色只是对当前某个点进行操作,不会影响到其他地方,不会生成阴影漫反射光分散的反射到各个方向,所有的观测点看到的颜色一致。...

2021-09-17 18:03:34 228

原创 GAMES101-计算机图形学学习笔记-光栅化

屏幕屏幕:是像素的数组,数组的大小为分辨率。将屏幕定义为左下角与原点重合,x与y轴上的一个平面,宽width像素,高height像素。其覆盖范围为[0, width] x [0, height]。将标准立方体转换到屏幕中:光栅化采样对像素点中心是否在三角形内进行采样for(int x = 0; x < xmax; ++x){ for(int y = 0; u < ymax; ++y){ image[x][y] = inside(tri, x + 0.5, y + 0.5)

2021-09-11 18:05:01 165

原创 GAMES101-计算机图形学学习笔记-Transformation

仿射变换线性变换缩放x′=sxx           y′=syyx' = s_xx \space\space\space\space\space\space\space\space\space\space\space y' = s_yyx′=sx​x           y′=sy

2021-09-08 21:48:51 147

原创 GAMES101-计算机图形学学习笔记-基本线性代数

向量点乘a→⋅b→=∥a→∥∥b→∥cos⁡θ={x1y1z1}{x2y2y2}=x1x2+y1y2+z1z2\overrightarrow{a} · \overrightarrow{b} = \lVert\overrightarrow{a}\rVert \lVert\overrightarrow{b}\rVert \cos\theta = \left\{ \begin{matrix} x1 & y1 & z1 \end{matrix}\right\}\left\{ \be

2021-09-08 15:51:14 146

原创 Unity Asset Bundle

AssetBundles-Browser下载链接打包:资源下方可以指定包和后缀,可以添加目录。打包某个资源,如果其所依赖的资源没有被打包,那么依赖的资源会被打包到一起,如果多个地方都依赖到了该资源,就会重复占用空间。物体依赖的贴图、材质等共享的资源需要一并打包。加载时需要先加载依赖资源。using UnityEditor;using System.IO;public class AssetBundleGenerator{ [MenuItem("Assets/Build AssetB

2021-06-15 22:29:33 264 2

原创 C# 优先队列 -- 基于原生数组实现

C# 中暂时没有现成的优先队列/最小堆,于是基于原生数组手动实现了一个,需要使用的话直接拷贝即可。PriorityQueueusing System;using System.Collections.Generic;public class PriorityQueue<T>{ //用于储存堆元素(是一颗数组形式的完全二叉树),堆顶下标为0 private T[] elements; private int size; public int Size {.

2021-06-09 21:39:24 160

原创 Unity 单例基类

单例模式在开发中十分常用,反复的编写十分浪费时间。我们可以写一个基类,让单例的类继承自该基类即可,一劳永逸。单例基类-普通C#类public class Singleton<T> where T : new() { private static T instance; public static T Instance { get { if (instance == null) .

2021-06-09 21:01:46 244

原创 C# 多线程与网络编程

目录多线程概述进程线程Thread线程状态ManualResetEvent多线程概述进程进程是应用程序的一个运行实例,包含程序所需资源的内存区域,是操作系统进行资源分配的单元。进程之间相互独立,互不影响。线程线程是进程中的一个执行单元,也是 CPU 分配时间片的单位。一个进程可以包含多个线程,线程间相互独立,同一进程中的线程共享当前所有资源。Thread用于创建和控制线程,设置其优先级并获取其状态。构造函数: //ParameterizedThreadStart:含一个object类型参

2021-05-14 10:48:38 577

原创 Lua 基础

目录变量字符串操作变量Lua 中的一个变量可以随便赋值,自动识别类型四种变量类型: nil number string boolean --nil a = nil --number a = 1 a = 1.2 --[[ string Lua中双引号和单引号都代表string --]] a = "123" a = '321' --boolean a = false --获取变量类型 print(type(a)) --type 的返回值是string字符

2021-05-01 20:43:23 224

原创 Unity 资源映射框架

前言我们知道,使用Resources.Load< T >() 可以加载 Resources 文件夹下的文件,但是在项目中,需要一次加载多个文件时文件可能分布在多个目录下,我们不方便去简单地加载文件,同时,加载的文件的目录也可能变动,这使得代码中的目录字符串修改起来十分麻烦。于是我们可以在编辑器中生成一个资源映射表,使程序运行时可以通过文件的名字直接取得文件的目录。本文以 prefab 的资源映射表为例?????????????????????????????????????????????

2021-04-07 20:58:02 600 5

原创 C# 迭代器与 Unity协程

协程 yield return -- WaitForFixedUpdate //在FixedUpdate后执行 -- null、0/...、WaitForSeconds //在每帧Update之后执行 --WaitForEndOfFrame //在每帧结束后执行 --WWW //在请求结束后执行Start可写作协程 private IEnumerator Start(){ yield return xxx; }...

2021-04-02 21:25:51 168

原创 彻底弄清补码加减法运算,正数、负数位移运算原理

前言所有的运算都是补码运算。正数的补码是其本身负数补码的计算方式:由原码到补码:原码除符号位以外全部取反得到反码,再加1得到补码。由补码到原码:亦为除符号位以外取反加1,需注意,若补码为正,此时原码和其本身相等,无需取反加1,若不理解,请阅读下文加法例子。例如(为方便清晰本文以 8bit 类型为例):-3 的原码:1000 0011-3 的反码:1111 1100-3 的补码:1111 1101两个不同情况的加法例子:例1:-3 + 22 的补码为其本身: 0000 0010

2021-03-23 14:08:44 18737 1

原创 Unity3D 初级案例 推箱子 完整项目 带详细注释

fang’shanfangshan

2021-03-17 23:20:37 3124 2

原创 Johnson全源最短路算法

全源最短路问题当 n 很小时,可以跑 loyd无负边权的图直接跑n轮dijkstra。存在负边权的图无法跑dijkstra,n轮SPFA可被特殊数据卡掉,将图转换为无负权边的图再跑dijkstra。做法:建立超级源S,到每个点连长度为0的单向边。以S为起点跑最短路,得到到节点 i 的距离 f[i]。对于 edge(u, v, dis):由最短路性质可知,f[u] + dis <= f[v],洛谷P5905模板#include <iostream>#include &lt

2020-11-05 17:15:26 458

原创 Android BroadcastReveiver 详解

ContentBroadcastReceiver前言注册方式静态注册动态注册有序广播本地广播BroadcastReceiver前言BroadcastReceiver(广播接收器)是安卓的四大组件之一,其本质是一个全局的监听器,负责监听、处理程序或系统发出的广播,可以利用这种机制实现各程序、组件之间的通信。注册方式静态注册在 Manifest.xml 中进行配置动态注册有序广播本地广播...

2020-10-12 23:22:51 223 1

原创 Android Service与IntentService测试

目录ServiceIntentServiceService布局文件中定义了四个按钮,分别设置了对应的监听事件:startService(),stopService(),bindService(),unbindService()。在 MyService 的回调方法中打印该方法名以及对应线程。测试:点击顺序:Start -> Stop可知 Service 的几个回调方法都是在 UI 线程中进行的,所以在这些方法中不可直接进行耗时操作。点击顺序:Start -> Start -&g

2020-10-09 16:34:26 196

原创 Android Handler 工作原理剖析

为何不new message而使用obtain(注释)为何一个message不能被同时占用为什么弱引用可以防止内存泄漏为什么要使用static定义handler每个contextWrapper都有looper,sendmessage是调用的looper的方法?不能阻塞ui线程,开新线程,又要更新ui数据(线程通信)message回收机制,重复利用post与sendlooper是禁止new的,如果希望handler正常工作,当前线程必须有...

2020-10-06 18:36:15 249

原创 安卓小游戏 2048 新手练手项目 完整代码(含注释)

看了极客的安卓2048的开发教程,大概了解了一下思路,然后自己就开始写了。后来发现这个设计思路不是太好,不方便加移动动画,就只加了创建卡片和合并的动画,不过用来练手还可以。游戏截图如下:如果想拷贝到本地运行的话,注意修改和包名相关的地方或者在创建工程的时候按照以下命名:项目名: Game2048包名: pers.hurric.game2048AndroidManifest.xml仅需设置screenOrientation<?xml version="1.0" encoding="ut

2020-10-04 13:55:16 7037 3

原创 Tarjin算法 有向图、混合图 缩点模板

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;#define maxn 10010#define maxm 100010int xx[maxm], yy[maxm];//储存原图的 u -> v,方便后续遍历建新图(有向无向混合图应开两倍空间)int head[maxn], tot;//链式前向星存图int low[maxn], dfn[ma

2020-10-01 11:40:55 181

原创 LCA最近公共祖先问题 倍增模板

#include <cstdio>#include <iostream>using namespace std;#define maxn 500010struct node{ int nex; int to;}edge[2 * maxn];int father[maxn][35];//表示向上的第(1 << i)个父节点int depth[maxn];int lg[30];//常数优化,储存(1 << i)的值int head[ma

2020-10-01 11:16:47 117

原创 字典树 数组方式实现

字典树在词典中查找某个单词时,例如:boy,我们会先找到 ‘b’,然后找到 ‘o’,最后找到 ‘y’。这个过程的时间复杂度是 O(m),m 为单词的长度。字典树是模拟这个过程的数据结构,十分高效。例如储存 do,dog,boy,bob,结构如下:可以看见,公共前缀仅储存了一遍 ,字典树在空间上的效率也很高。但若用本身的结构来存储仍然会占用大量空间,用数组来存储字典树可以以非常紧凑的方式节约大量空间。代码int pos = 1;int trie[1000010][26];//存储下一个字符的位置

2020-09-07 22:19:59 573

原创 图论最小生成树算法模板

目录最小生成树算法primkruskal最小生成树算法prim时间复杂度: O(Elog2V)适用范围: 稠密图基本思路: 将任一点作为起点,将其所连接的最近的点加入,再从两点所连的点中找到最近的一个加入,依次类推。模板:#include <iostream>#include <vector>#include <queue>using namespace std;#define inf 0x3f3f3f3f#define maxn 110st

2020-08-16 16:16:50 136

原创 图论最短路算法模板

目录最短路算法floydbellman-forddijkstra最短路算法floyd时间复杂度: O(V3)适用范围: 适用数据量小的题目,程序简单,可求出所有结点间的最短路径,适用带负边权的图,如果存在G[i][i]为负数,则存在负环。基本思路: 逐个加入节点作为中转点,更新起点到所有点的最短路。模板://第一行输入n, m, 后m行输入u, v, w, 求第一个结点到第n个结点距离。(无向图)#include <bits/stdc++.h>using namespace s

2020-08-15 16:48:41 226

原创 Android 数据持久化保存方式之一 SharedPreferences

前言SharedPreferences 是安卓永久保存数据的方式之一,数据不会随着 Activity 的销毁、程序的退出而丢失。SharedPreferences 储存数据的方式为 key - value 形式,可以保存简单的数据。例子如下是一个封装好的储存 int 类型数据的类。package com.example.sharedpreference;import android.content.Context;import android.content.SharedPreferences

2020-06-28 17:43:26 626

原创 Java volatile作用以及为何不能保证原子性

目录1.前言2.保证可见性3.防止指令重排4.不保证原子性1.前言volatile在多线程编程中是一个十分重要的关键字,volatile被称为轻量级的synchronized,它保证了数据的可见性,同时其执行成本较synchronized更低。2.保证可见性多线程环境中,每个线程都有自己的工作空间,某个线程对数据修改后,该数据不一定能立刻在其他线程中更新(不可见)。例如如下代码:public class VolatitleTest { public static void main(Stri

2020-06-17 21:00:49 1083

原创 hdu2795 -- Billboard 线段树 详解

题目通道hdu2795题目大意在一个广告牌中放通告,每个通告宽为wi,高为1,放通告时尽量往上放,再在此基础上尽可能靠左放。问每块通告放置的位置(无处可放则输出-1)。题目思路样例输入3 5 524333放置位置如图:到第5块的时候已经无处可放。跟着模拟一遍放置,很容易想到基本的思路,暴力的解法是:放置一块通告,从第1行到第h行枚举,如果当前行所剩余的空间能够放置该通告,则放置该通告并更新当前行的剩余空间。最坏的情况的时间复杂度是O(1+2+…+n)即O(n2),暴力枚举会T

2020-05-31 16:57:49 364

原创 Leetcode#3 -- 无重复字符的最大子串 滑动窗口算法

无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。题目思路滑动窗口其实就是一个队列,例如"abca",abc依次进入队列,下一个a入列时发现队列中已经有a了,我们让前面的a出列,就维持了队列是无重复字符的,再例如"abbcd",ab先入列,下一个b入列时,前面的a和b都需要出列,才能维护无重复性。我们可以用指针(下标)来模拟,pLeft记录队首位置,pRi...

2020-05-08 11:44:42 180

原创 Leetcode#5 -- 最长回文子串 动态规划与中心扩展法

5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。动态规划解法如果用P[i][j]来表示从 i 到 j 的子串是否为回文串。状态转移方程:P[i][i] = true, P[i][i+1] = (s[i] == s[i+1]);P[i][j] = (P[i + 1][j - 1] && s[i] == s[j]);...

2020-05-06 21:39:04 198

原创 POJ1182 -- 食物链 并查集扩展域做法

食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 116112 Accepted: 35343Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种...

2020-04-22 20:47:22 152

原创 POJ1456 -- Supermarket 贪心与并查集优化

SupermarketTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 23758 Accepted: 10415DescriptionA supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pro...

2020-03-23 16:54:29 181

原创 POJ3784 -- Running Medain 利用大顶堆和小顶堆维护中位数

Running MedianTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5191 Accepted: 2309DescriptionFor this problem, you will write a program that reads in a sequence of 32-bit signed integer...

2020-03-09 20:16:55 255

原创 POJ1222 -- EXTENDED LIGHTS OUT 通过二进制模拟枚举状态

EXTENDED LIGHTS OUTTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 15798 Accepted: 9575DescriptionIn an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons ea...

2020-03-06 15:27:39 265

空空如也

空空如也

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

TA关注的人

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