自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hnliu's blog

做一个快乐的程序员

  • 博客(42)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 JS性能优化规范

1.作用域优化随着作用域中的作用域数量的增加,访问当前作用域以外的变量的时间也在增加。所以访问全局变量总是比访问局部变量要慢,因为需要遍历作用域链。只要能减少花费在作用域链上的时间,就能增加脚本的整体性能。所以尽量避免多次的全局查找(因为要逐层向上的作用域进行查找)这个函数的时间复杂度是 (循环次数 * 查找到 document.title属性) 的次数,查找到 title 最坏的情况是遍历...

2019-04-04 17:43:54 308

原创 观察者模式及如何通过消息机制(观察者模式)实现模块间解耦

1、讲一下什么是观察者模式什么是观察者模式呢,观察者模式又叫做订阅发布模式,类似这样的例子生活里随处可见,比如公众号,比如微博关注的功能,这都是订阅发布模式,我们对一个公众号感兴趣,就会去关注一个公众号,这个公众号有了什么新的文章,新的内容,就会推送给所有关注了这个公众号的微信号,如果某一天我们对这个公众号不再感兴趣,我们就可以取消对它的关注,后面这个公众号再有什么新的内容,也不会再推送给我们...

2018-03-06 11:27:35 1155

原创 单一职责原则和开放封闭原则

单一职责原则:所谓单一职责原则,简单点说就是,每个类,每个方法最好是只做一件事情,只具备一个功能。这样做有什么好处呢,举个简单的例子。A方法具有两个功能,一个功能是计算N个数的平均数,另一个功能是睡眠10秒钟,那这个时候,我的B方法需要一个功能,就是计算平均数,但B方法又不想在计算了以后去睡眠10秒钟,那这个时候B方法就没办法使用现成的A方法进行计算。现在有什么办法可以解决这个问题呢。

2018-01-31 11:51:45 773

原创 推荐一款好用的Visual Studio插件

Viasfora是一款Visual Studio插件,通过安装这个插件,可以给文本编辑器添加很多有用的颜色。五颜六色的括号 受到vim同名插件的启发,这个功能可以更容易的识别出代码中的各种括号之间是如何配对的。关键词高亮XML文本改进 您可以自定义XML标记如何在编辑器中显示。下面我们来看一下如何在Visual Studio中安装这个插件1.首先找到 “工具” 菜单栏中的 “扩展和更新”

2017-08-04 18:24:07 22185 22

原创 大话设计模式之(装饰器模式)

导言:我曾经以为我可以用继承处理一切。后来我领教到运行时扩展,远比编译时期的继承威力大。装饰器模式可以给爱用继承的人一个全新的眼界。一旦你熟悉了装饰器模式,你将学会如何在运行的过程中给对象赋予新的指责和功能。先不谈模式,如果现在要你开发一个可以给人搭配不同服饰的系统,不如类似QQ、网络游戏或论坛都有的Avatar系统,你怎么开发? 半小时后,小菜的第一版代码出炉。代码结构图:#include "s

2017-08-02 17:35:00 1958 3

原创 使用python对cocos2dx的手游图片资源进行加密

使用python对cocos2dx的手游图片资源进行加密导言由于项目的需要,要对游戏的图片资源进行加密,目前比较常用的做法应该是使用TexturePacker的加密功能。但因为我们的整个打包流程都是python脚本控制,自动化完成的,如果要使用TexturePacker的加密功能,就要把TexturePacker的命令行工具集成到整个自动化打包工具中。考虑到工作量会比较大,所以决定采用在图片压缩后自

2016-09-08 15:29:41 3682 15

原创 Android 对象池的简单实现

Android 对象池的简单实现 首先简单说一下为什么要使用对象池,使用对象池的主要原因是防止短时间内频繁大量的创建和销毁对象,也就是频繁GC,引起内存抖动,导致影响我们应用的性能。package com.qumitech.common.pool/** * author : hnliu * e-mail : [email protected] * create date : 2020/09/12 * description :管理对象池的接口 */in

2020-09-17 14:17:00 2024 3

原创 kotlin - 基础语法

添加链接描述

2020-02-25 17:09:26 161

原创 kotlin 异常错误汇总

常见异常1.Not nullable value required to call an ‘iterator()’ method on for-loop range这个错误的原因是 for 迭代中的数组不可以为null解决办法使用orEmpty(), 如果这个数组为null,则orEmpty() 返回一个空的数组,否则返回原数组2.Operator call corresponds...

2020-02-24 11:37:02 2434

原创 一些学习基础知识比较好的网站

1.c++ STL 教程http://c.biancheng.net/stl/关于STL是使用方法和底层相关的数据结构和算法比较的详细,还有简单直观的图解1.c语言中文网http://c.biancheng.net/c/c++,linux等相关基础知识...

2019-03-14 11:33:58 606

原创 lua ... 可变长参数

lua 中 … 在参数列表中意为”可变参数”,这个可变是指,通过这个可以输入很多参数,但是不需要一一列举出来!~例子:function a(...) local a1 ,a2,a3,a4 = ... print("this is local num=",a1,a2,a3,a4) return a1, a2, a3, a4endlocal at1,at2,at3...

2018-06-08 14:36:47 4265

转载 CocosCreator 集成 Pomelo 教程

转载:https://www.jianshu.com/p/c64f7607adeehttps://blog.csdn.net/qq_25436207/article/details/77824315

2018-04-26 16:25:50 1885

原创 Android.mk 文件语法详解

http://www.cnblogs.com/wainiwann/p/3837936.htmlhttp://blog.sina.com.cn/s/blog_4057ab62010197z8.htmlhttp://www.360doc.com/content/13/0604/15/110467_290407526.shtml

2018-04-24 17:19:33 368

原创 windows安装pomelo

pomelo是网易的开源服务器项目,不但适用于游戏服务器开发, 也可用于开发高实时 Web 应用。本经验将介绍windows环境下pomelo的安装过程方法/步骤1.安装nodejs。nodejs下载地址:https://nodejs.org/en/。下载完成后点击安装,一直默认点击下一步即可,安装比较简单,这里不再一一展开。2.检查nodejs是否安装完成。在命令行中输入:node,点击回车查看是

2018-04-23 12:01:27 885

原创 多线程中join和detach方法的理解

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

2017-12-25 17:27:43 9180

原创 TexturePacker求Key纪

TexturePacker 是一款功能强大的游戏图片素材加工处理软件,具有压缩,加密,图片合成等一系列的功能。由于自动化打包平台的系统是 linux,故我需要在 linux 上面使用 TexturePacker,看到很多人说TexturePacker 的作者 Adreas 人很好,可以在网站上免费申请注册码,所以我就就尝试这用自己的 csdn 博客去申请。这里是申请注册码的网址:https://ww

2017-12-08 10:58:54 856

原创 COCOS2D-X Battle 独立游戏 (一) 第一版文案

这是一款回合制1V1攻防类即时性游戏,主要玩法是在线和一个其他玩家进行回合制攻防大战。每个玩家都有自己的血条,游戏中,玩家左手可以选择使用盾牌、水桶和沙子,右手持有石头,火把以及汽油桶,每个攻击回合,玩家可以向敌对玩家丢石头,火把或者是汽油桶。敌方玩家需要根据丢过来的东西,选择使用哪个物品进行防御。每次选择石头都会随机大小不等的石头,对方如果丢出石头,一定要用盾牌来防守。每个玩家都有自己的胜率和等级

2017-11-03 08:39:55 705

原创 COCOS2D-X Battle 独立游戏 (二) 新建游戏主工程

这里就不一一赘述如何搭建环境了,简单描述一下新建游戏工程的过程。 首先找到cocos2d-x-3.9所在的文件夹,我的是在 F:\develop\cocos2d-x-3.9 在这个目录下,然后按住 ‘shift键+鼠标右键’,弹出右键菜单,点击‘在此处弹出命令窗口’。 输入如下命令 cocos new battle -p hit.edu.hnliu -l cpp -d F:/project

2017-11-02 22:27:33 577

原创 消息机制简单实现模块间解耦

消息机制一直是软件开发中减少模块之间耦合的标准方式,下面我们举一个简单的例子,看看是如何通过消息,减少类 A 和类 B之间的耦合度的。下面是传统的方法,实现 A 对 B 类的某个方法的调用,不使用消息机制的传统方法,A 需要持有 B 的对象,并且 A 要知道所要调用的B的方法,这样 A 和 B 就强耦合在了一起,一旦 B 类发生变化,A 类就可能要重新编译,而且如果 doSomethingBSpec

2017-10-26 17:22:20 3409 1

原创 vector iterator not incrementable

情况1:int _tmain(int argc, _TCHAR* argv[]){ std::vector<int> aa = { 123, 1, 2, 44, 122, 87 }; for (const auto &child : aa) { std::cout << child << std::endl; aa.push_back(112

2017-10-24 18:26:33 517

原创 COCOS2D-X在给弹出框加入弹出效果过程中遇到的问题以及解决办法

导言:由于项目新版本需要给每个弹出界面加上一个弹出效果,如果只是给一个或者几个界面加上这样的效果,其实就是简单的通过几个 runAction 去实现。但由于有很多个界面都要实现这样的效果,所以思考以后,我打算使用一个装饰器去实现这样的效果,装饰器会将一个普通的弹出框装饰成一个具有特殊弹出效果的弹出框。之所以使用装饰器去实现这个功能,是因为这样可以将关于弹出效果的代码部分进行统一的管理,同时可以动态的

2017-10-18 17:00:55 1184

转载 new(std::nothrow) 和 new() 的区别

源码方面的信息就不详细讲述了,找找代码看看便知,简要说明下: new(std::nothrow) 顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 来判断new操作是否成功 普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上if(p == NULL) 但是实际上是自欺欺人,因为如果分配成功,p肯定不为NULL

2017-09-14 10:03:25 3215

原创 读《重构-改善既有代码的设计》的一些简单的概念和理解

重构(名词):对软件内部结构的一种调整,目的是不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构(动词):使用一些列重构手法,在不改变软件可观察行为的前提下,调整其结构。重构的节奏一般是这样的:小改动,测试,小改动,测试,小改动,测试…重构技术就是以微笑的步伐修改程序。如果你犯下错误,很容易便可发现它。去掉某些临时变量控制类的变化造成尽量小的影响是什么让程序变得如此难以修

2017-08-17 11:07:27 1023

转载 在 Visual Studio Code 中使用Git

原文链接 : http://www.cnblogs.com/ashidamana/p/6122619.html

2017-08-08 16:56:12 848

转载 程序员的自我修养(编译和链接)

原文链接:http://www.cnblogs.com/Tan-sir/p/7280776.html

2017-08-07 17:37:29 462

原创 一款能够提高工作效率的小软件

Wox是一款强大的开源项目软件,它能够做到快速启动呼出系统中的各个项目,也能快速搜索文件,高效搜索,同时它还可以配合插件做到打开网页、翻译单词等用途,绝对是一键直达的好帮手。如果能够合理使用的话,绝对可以大幅度的提高工作效率。wox托管在github上的地址: https://github.com/Wox-launcher/WoxWox使用说明:软件开启成功后会在桌面右下角显示一个图标,显示该图标

2017-07-31 15:13:58 5409

原创 hydra框架之责任链设计模式

一、什么是链,链是一系列的节点的集合,链的各个节点可灵活拆分再重组。二、何为责任链 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。下面这篇文章可以详细的讲述职责链模式的使用场景,职责链的优缺点,指责链的实例。 http://www.cnblogs.com/kym/archive/2009

2017-07-27 15:43:50 1621 2

转载 字符串匹配的KMP算法

来源:阮一峰字符串匹配是计算机的基本任务之一。举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算

2017-07-25 15:17:12 852 4

原创 几条简单的OO原则

1. 封装变化2. 多用组合,少用继承3. 针对接口编程,不针对实现编程4. 为交互对象之间的松耦合设计而努力

2017-07-11 17:58:14 353

原创 Android.mk使用注意事项

1. 想在一个mk中引用静态库,注意一定要添加库目录的声明代码。作用类似于VS中设置的附加库目录。$(call import-module,protocols/android)2. 想将某个目录添加到 NDK_MODULE_PATH 环境变量中。作用类似于在VS中设置的附加包含目录 。$ (call import-add-path,$(LOCAL_PATH)../../)

2017-07-03 12:18:25 322

转载 linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?

.o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件. .a 就是archive, 也就相当于windows的VC下编译的lib文件, 俗称静态库文件..o文件是链接文件,.a是静态库文件,靠.o文件生成,作为一个库为外部程序提供函数,接口。 生成.o文件: gcc -c test.o test.c 生成.a文件: ar cqs test.a te

2017-06-30 11:09:44 24651

转载 VS2013 — 常用快捷键

VS2013常用快捷键: 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”; 2)前进到下一个光标位置:“Ctrl + Shift + - ”。 2.复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键“Ctrl+C”来完成复制操作,而无需选择整行。

2017-06-23 11:11:01 302

转载 Linux中使用sed命令替换字符串小结

sed替换的基本语法为:sed ‘s/原字符串/替换字符串/’单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:sed “s/原字符串包含’/替换字符串包含’/” //要处理的字符包含单引号命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便

2017-06-21 10:11:41 485

原创 H5网页版贪吃蛇源代码

H5网页版贪吃蛇源代码,新建文本文档,将下面的代码复制粘贴到文本文档,然后保存文件。重命名文件及后缀名为index.html。将文章最下面的两个图片保存下来,蓝色背景大图重命名为back.jpg,骷髅头的命名为pirate.png。在index.html同级目录下新建一个文件夹叫做image,然后将两张背景图放入image文件夹。现在index.html就可以正常运行了,双击就可以运行。

2017-06-15 16:25:27 15491 10

原创 浅谈C++指针类型的转换

首先我们来看一下下面这段代码,类C多重继承自类A和类B,观察程序运行后打印的结果我们会发现 (A*)c 和 (B*)c 的值不同,为什么做了一次强转之后的值会不一样呢?#include "stdafx.h"#include <iostream>using namespace std;class A{public: virtual void DrinkSomething(){};pr

2017-06-15 11:29:39 2216

原创 cocos2dx游戏性能优化之对象池

cocos2dx游戏性能优化之对象池对象池机制:可回收与重复使用手机游戏的性能对于一款手机游戏来说,那是相当的重要了,我们常说的性能呢,一般包括耗电,发热情况,流畅度,是否存在卡帧等等。从专业的角度来说,包括FPS帧数,手速侦测,CPU和内存占用率等等。那我们今天就来说一下如何通过使用对象池的机制,有效的提高内存和计算效率,从而达到提高游戏流畅度的目的。其本质与缓存类似,即希望能减少那些频繁使用的对

2016-09-20 19:31:22 5591

原创 C++ 详解几种类型转换

C++ 详解几种类型转换首先我们要先了解一下C语言风格的类型转换,一般我们会用(T)expression或是T(expression)进行C语言的类型转换,然后 这种类型转换,会不分青红皂白的进行转换,ANSI C++定义了四种新类型的转换符号,分别是reinterpret_cast, static_cast, dynamic_cast和const_cast,旨在于控制类(class)之间的类型

2016-09-14 07:39:36 509

原创 几种c++常见的类型转换

C++ 详解几种类型转换首先我们要先了解一下C语言风格的类型转换,一般我们会用(T)expression或是T(expression)进行C语言的类型转换,然后 这种类型转换,会不分青红皂白的进行转换,ANSI C++定义了四种新类型的转换符号,分别是reinterpret_cast, static_cast, dynamic_cast和const_cast,旨在于控制类(class)之间的类型

2016-09-13 22:55:38 458 1

原创 cocos2dx碰撞检测算法

在Cocos2d-x 3.x版本添加了对3D物体的支持后,3D物体的碰撞检测方法也随之更新,其中一种最简单的碰撞检测方法就是AABB碰撞检测。1.AABB包围盒在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围。其中,AABB(axis-aligned bounding box)包围盒被称为轴对其包围盒。二维场景中的AABB包围盒具备特点:(注:由于Cocos2d-

2016-09-12 15:37:29 3808

翻译 教你安装Atom编辑器并使用震撼的编辑效果

教你安装Atom编辑器并使用震撼的编辑效果

2016-09-08 14:43:53 5036 1

HTML5贪吃蛇

解压包内有HTML5贪吃蛇游戏源代码,图片资源。

2013-09-14

VC简明教程

VC++简明教程,通过简单的例子一步一步叫你学会VC++

2013-09-14

数据结构与算法

数据结构与算法讲述了贪心,动态规划,图论等内容

2013-09-14

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

TA关注的人

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