自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我对ThreadLocal的理解

网上转了一圈,发现很多对ThreadLocal讲解的文章都有些混乱,讲的不够清楚。 这边说一说我自己的理解。 网上有些人将ThreadLocal和synchronized进行比较,其实这两者没什么关系,使用场景也完全不同。 ThreadLocal说白了,只是为了在多线程环境下方便变量的访问和传递罢了。这也就是为什么ThreadLocal的实例常常设为static属性,就是为了方便访问。 例如

2017-09-27 13:58:25 288

原创 设计模式在游戏中的运用(工厂模式)

工厂模式分为简单工厂,工厂方法,抽象工厂三种模式。 我们先来说说为什么要使用工厂模式,因为我主要是做游戏的,我们这边就拿游戏来举例子,假设有一个rpg游戏,需要在地图中加载怪物,因为这种需求可能从多个地方触发,比如碰到一个陷阱加载几个怪物,然后可能根据特定时间又要加载怪物,还可能使用一个道具加载几个怪物。 如果我们把创建怪物的过程分别写在陷阱的处理,时间处理,道具处理过程中,则创建怪物的逻辑就分

2017-09-26 14:35:06 2121

原创 PIXI.js源码解析(5)之事件管理器——InteractionManager

在基本上所有的渲染框架中,都会提供原始事件的分发功能,比如监听某个对象的鼠标按下弹起,触控,等等。而且不单单是渲染引擎,原始事件的监听和分发几乎是所有gui框架的构建基础。 pixi中的原始事件分发主要是由InteractionManager完成的,InteractionManager首先捕获到原始事件,之后需要确定事件的触发对象,之后使用事件流逐层传递,事件在传递过程中一共会经过三个阶段,不清楚

2017-09-24 23:02:44 2211

原创 awt包里的ColorSpace类

ColorSpace代表一个颜色空间。常见的颜色空间有rgb,cmyk,lab等。ColorSpace的方法可以将不同颜色空间中的颜色变换到当前颜色空间中,也可以将当前颜色空间中的颜色变换到其他颜色空间。其实说到底颜色在计算机中的表示就是一串数字,然后我们需要在不同的用途下变换颜色罢了。比如如果要渲染颜色到屏幕,我们手里有一张lab颜色模式的图片,此时我们只能将他的颜色转换到rgb

2017-09-21 01:55:43 759

原创 PIXI.js源码解析(4)——Texture

一个渲染框架当然少不了对图像的处理,之前谈到的displayobject和container都只是显示对象的容器,但是最终能显示的只有texture. texture可以抽象的理解为图像数据,即像素值,而displayerObject的属性可以理解为这个图像在一个世界中是如何显示的,比如显示在哪里,是不是要缩放,旋转之类的。 不过pixi.js的texture类并不能算得上是真正的原生image

2017-09-18 17:09:47 2002

原创 RpgMakerMV源码解析(1)-输入管理

输入管理在几乎所有的游戏框架中都有输入管理器的存在,作用就是将系统底层的按键事件收集起来,然后对外提供一个简单的按键状态访问。 我们接下来就看看在rpgmakerMV中的输入管理实现。 rpgmakerMV可以获取键盘输入,手柄输入,以及触屏输入,分别实现在两个类Input,touchInput里,两者大同小异,我们这里主要看一看Input的实现,只要理解了基本概念,分析touchInput也是

2017-09-18 10:33:45 8854

原创 PIXI.js源码解析(3)——Container

container代表了一个容器,但是同时也是一个可以显示的对象,所以他继承了显示基类displayobject。container内部维护了一个数组,代表子级。如图所示 container的大部分方法都很简单,基本上是看函数名就知道意思了,例如addChild,addChildAt,内部无非就是对数组进行操作。 这里只拿addChild简单分析一下。 首先先判断arguments.len

2017-09-16 17:01:03 2337

原创 PIXI.js源码解析(2)——Transform

Transform其代表了一种坐标系之间的变换注意一下就会发现,在许多渲染引擎,游戏引擎中都有Transform类的身影,比如unity,as3。那么今天我们就来看看pixi.js中的Transform类。 pixi.js一共有三个和Transform有关的类,他们分别是TransformBase,TransformStatic,Transform,TransformBase是基类,而Transf

2017-09-15 00:15:07 2630

原创 PIXI.js源码解析(1)——DisplayObject

Pixi.js是一个用JavaScript写的2D渲染引擎,可以用来在浏览器里做交互图形、动画和游戏等应用,主打支持硬件GPU渲染的WebGL API,如浏览器不支持WebGL,Pixi则会退用HTML5 Canvas来渲染。 接下来先来分析基础显示架构,其实很多渲染引擎都有类似的结构,如果学过as3的估计会感觉特别亲切。显示架构DisplayObject是所有可以被渲染在屏幕上的类的基类,Disp

2017-09-14 17:29:27 3652 1

原创 使js构造函数不会被当做普通函数调用的技巧

例如一个类A我们可以在构造函数的开头使用_classCallCheck来检测this指针function A() { _classCallCheck(this, A);}function _classCallCheck(instance, Constructor) { if (!(instance instanceof Construct

2017-09-12 19:54:25 620 2

原创 js禁用上下文菜单的代码

var elements = document.body.getElementsByTagName('*');var oncontextmenu = function() { return false; };for (var i = 0; i elements.length; i++) { elements[i].oncontextmenu = oncontextmenu;}

2017-09-07 17:10:43 494

原创 js禁用文本选择的代码

以下代码可以在所有浏览器中屏蔽文本选择var body = document.body;body.style.userSelect = 'none';body.style.webkitUserSelect = 'none';body.style.msUserSelect = 'none';body.style.mozUserSelect = 'none';

2017-09-07 17:08:15 319

原创 操作系统缓存机制

起源在每个指令周期中,CPU至少会访问内存一次,来抓取下一条执行的指令,而且经常会附带着更多次的访问,来获取操作数,以及存储结果。而CPU执行指令的速度就因此大大受限于对内存的访问速度,而且随着CPU的速度提高大大快于内存的访问速度提高,这个问题会越来越严重。理论上来说,我们可以制造一种存取速度与CPU寄存器相同的内存,但那样的话内存就会相当昂贵,所以为了解决这个问题,就需要利用短时间内指令的聚合特

2017-09-07 13:41:07 2977

原创 操作系统对同时到来的中断的处理

操作系统对同时到来的中断的处理有可能的两种处理方式。 第一种是进入中断后直接屏蔽其他中断,这样就导致一种线性处理,比如两个中断进入后,一个中断先处理,处理完之后第二个中断再处理。缺点很明显,没有考虑到中断的优先级先后。 比如当一个键盘输入发生时,如果另一个中断正在发生,则键盘输入不会得到处理,这很可能导致键盘的IO缓冲区溢出以至于丢失部分数据。 所以更好的方法就是为中断设置优先级,当一个优先级

2017-09-07 00:35:44 913 1

原创 java和c语言变长参数的底层实现区别

java和c语言变长参数的底层实现存在着区别java其实是一个语法糖 类似private static int sumUp(int... values) {}其实最后编译时会转化为 实际上是传递了一个数组引用private static int sumUp(int[] values) {}所以如果同时写这两个函数,就会编译不通过,他们本质上是一样的而c语言的变长参数就要说到函数调用约定了

2017-09-05 23:51:42 467

原创 简单c语言汇编后代码解释(1)

今天我们来以一个简单的案例来解释c语言对应汇编语言的关系 #include "stdio.h"long add(long a, long b){ long x = a, y = b; return (x + y);}int main(int argc, char* argv[]){ long a = 1, b = 2; printf("%d\n", ad

2017-09-05 21:43:51 1371

空空如也

空空如也

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

TA关注的人

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