- 博客(459)
- 资源 (55)
- 收藏
- 关注
原创 [CocosCreator]AssetManager之管线
creator 使用管线(pipeline)来处理整个资源加载的流程,这样的好处是解耦了资源处理的流程,将每一个步骤独立成一个单独的管道,管道可以很方便地进行复用和组合,并且方便了我们自定义整个加载流程,我们可以创建一些自己的管道,加入到管线中,比如资源加密。管线管线 可以理解为一系列过程的串联组合,当一个请求经过管线时,会被管线的各个阶段依次进行处理,最后输出处理后的结果。如下图所示:管线与一般的固定流程相比,优势在于管线中的所有环节都是可拼接和组合的,这意味着开发者可以在现有管线的任
2021-09-10 11:15:05 2551 1
原创 [框架]PureMVC--Facade/通知源码
FaçadeMVC 元设计模式的核心元素在 PureMVC 中体现为 Model 类、View 类和Controller 类。为了简化程序开发,PureMVC 应用了 Façade 模式。Façade 是 Model、View 和 Controller 三者的“经纪人”。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Façade 类已经在构造方法包含了对核心 MVC 三者单例的构造。一般地,实际的应用程序都有一个 Façade 子类,这个 Façade 类对象负责初始化 Cont
2020-12-01 23:57:26 866
原创 [框架]PureMVC--核心层源码
Model层说明Model保存对Proxy对象的引用,Proxy负责操作数据模型,与远程服务通信存取数据。这样保证了Model层的可移植性。module puremvc { //Model的作用就是保存proxy对象的引用 export class Model implements IModel { proxyMap: Object = null; constructor() { if (Model.instance)
2020-12-01 23:04:57 851
原创 [框架]PureMVC简介
分层将一个复杂的程序进行层次划分。为每一层进行设计,每层都是内聚的而且只依赖与它的下层。采用标准的架构模式来完成与上层的松散关联。将所有与领域模型相关的代码都集中在一层,并且将它与用户界面层、应用层和基础结构层的代码分离。领域对象可以将重点放在表达领域模型上,不需要关心它们自己的显示、存储和管理应用任务等内容。这样使模型发展得足够丰富和清晰,足以抓住本质的业务知识并实现它。MVCMVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller
2020-11-30 23:58:32 1353
原创 [JS]事件循环怎么处理宏任务与微任务
new Promise((resolve) => { console.log('外层宏事件2'); resolve()}).then(() => { console.log('微事件1');}).then(() => { console.log('微事件2')})console.log('外层宏事件1');setTimeout(() => { //执行后 回调一个宏事件 console.log('内层宏事件3')}, 0)// 打印顺序是什么?// 外.
2020-10-24 14:54:38 542 1
原创 [JS]源码学习Promise
Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promise对象有以下两个特点(1)对象的状态不受外界影响。P...
2020-09-15 22:38:38 325
原创 [JS]彻底理解原型链
http://www.cnblogs.com/lidabo/archive/2012/12/04/2800921.htmlhttp://msdn.microsoft.com/zh-cn/library/cc485433(v=vs.71).aspx
2020-08-13 01:03:29 657
原创 [JS]彻底明白了原型
什么是原型对象?原型的概念定义为:所谓原型就是指函数的prototype属性所引用的对象,这个对象就是原型。原型的作用1:实现对象之间的数据共享。2.在es6之前,没有class的情况下,模拟面向对象,构造函数中放私有属性,原型上放公有属性,一般为方法。function fn1() {}var fn2 = function () {}var fn3 = new Function()console.log(typeof fn1) //functionconsole.log(typeof
2020-08-12 23:43:44 313
原创 [多线程]C++11多线程-条件变量(std::condition_variable)
互斥量(std::mutex)是多线程间同时访问某一共享变量时,保证变量可被安全访问的手段。在多线程编程中,还有另一种十分常见的行为:线程同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了有力的支持,这就是条件变量。条件变量位于头文件condition_variable。条件变量能阻塞一个或多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的...
2020-03-31 19:04:47 1027
原创 [架构]MVC/MCP/MVVM三个框架模式
MVC框架模式MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。MVC框架模式图角色说明模式说明当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。M...
2020-03-23 17:29:40 2827 1
原创 [多线程]C++11多线程用法整理
C++11中加入了<thread>头文件,此头文件主要声明了std::thread线程类。C++11的标准类std::thread对线程进行了封装,定义了C++11标准中的一些表示线程的类、用于互斥访问的类与方法等。应用C++11中的std::thread便于多线程程序的移值。关联头文件<thread>:该头文件主要声明了 std::thread 类,另外 std:...
2020-03-17 23:30:11 1394
原创 [网络知识]TCP协议中的粘包与拆包
在平时客户端socket开发中,如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题。我们都知道TCP属于传输层的协议,传输层除了有TCP协议外还有UDP协议。那么UDP是否会发生粘包或拆包的现象呢?答案是不会。UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文...
2020-01-14 19:42:42 2221
原创 [iOS]苹果审核规则
不能强制用户注册 不能强制收集用户手机号 不能使用苹果不允许的权限 所有苹果手机内提供的服务,必须使用苹果内购 内购的类型一定要使用准确 宣传图一定要是应用的实际截图 适配ipv6网络 适配最新版本的iOS系统 各种尺寸的icon,需要保持一致性 开启app后,loading过程中需要有背景图,不允许黑屏等loading。 app内,不允许出现“测试”、“demo”、“试用”等...
2020-01-12 18:33:42 1660
原创 [C++]智能指针unique_ptr,shared_ptr,weak_ptr
C++中对于动态内存的使用非常严格,一次申请必须对应一次释放,否则将造成内存泄漏。这也要求程序员格外小心,比如如下示例:void getStr() { std::string * pstr = new std::string();//pstr为局部变量 *pstr = "Hello world"; .... return;}当该方法执行完毕后,局部变量p...
2020-01-12 00:16:08 524
原创 [Android]Activity生命周期之三大循环|五种状态|七种方法
生命周期三大循环我们能监控Activity生命周期中的三个嵌套循环(monitor three nested loops in the activity lifecycle)1.Activity的entire lifetime(全部的生命期)发生在调用onCreate()和调用onDestory()之间。在onCreate()方法中执行全局状态的建立(例如定义布局),在onDestr...
2019-12-26 19:02:10 4234
原创 [架构]接口行为的扩展
接口行为的扩展,经常面临这样的问题,之前已经定义好一个接口,且该接口已经在很多地方使用到,现在我们想让新增新方法。如下图所示,已经定义了接口IVedioMedia,已经有RM和Mpeg实现了它。现在如果在IVedioMedia接口中新增resize()方法,那么就要连同RM和Mpeg一同修改,这已经违反了open-close原则,即在添加新功能的同时,不修改原有的、已经存在的代码。这时候我们应...
2019-12-24 18:30:05 379
原创 [基础概念]这次,彻底弄懂接口及抽象类
抽象类及其作用抽象类,顾名思义,即类的抽象。在介绍面向对象概念时,我们知道类是客观事物的抽象,而抽象类又是类的进一步抽象,该怎么理解呢?举个例子,我们定义若干个类 class BMW、class Benz、class Audi,分别对客观事物“宝马”、“奔驰”、“奥迪”三种汽车进行抽象,包含相关属性和行为(即方法)。但是我们知道,汽车都有通用的属性和行为,比如品牌、发动机、方向盘、轮胎...
2019-12-24 18:00:55 406
原创 [设计模式]装饰、组合、职责链模式
模式介绍装饰模式:相当于是叠罗汉,将多个行为有序的串联起来,最终得到结果。(通过下一个行为装饰上一个行为) 组合模式:使得用户对单个对象和组合对象的使用具有一致性 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。使用场景适用于一些有关联关系的类,进行互相调用。装饰模式D...
2019-12-22 18:28:05 576
原创 [设计模式]一两句话的设计模式
创建型速记口诀: 单抽工建原单例:只需一个实例时考虑。要么没有,要么只有一个。 工厂方法:在允许不修改工厂类的前提下添加新类。 抽象工厂:当工厂方法无法满足多系列问题时,再重构为抽象工厂。提供相关性接口,无需具体指定 建造者:多个部件的建造实现相同,只是所需部件、建造顺序不同时考虑。构建与表示分离。 原型:在初始化信息不发生变化时考虑。重复利用现有实例的拷贝。结构型速记口诀:...
2019-12-21 18:32:01 383
原创 [概念]PCM文件&WAV文件头
PCM简介PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程...
2019-11-27 12:30:09 899
原创 [设计模式]工厂模式与抽象工厂模式
下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。简单工厂模式简单工厂模式不是 23 种设计模式里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标。工厂模式工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。 戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。 生产哪...
2019-10-10 18:56:49 275
原创 [基础概念]UML类之间的关系
类之间的关系类间关系有很多种,在大的类别上可以分为两种:纵向关系,横向关系。纵向关系就是继承关系。横向关系按照UML的建议大体可以分为四种: UML表示法 关系 依赖(Dependency) 虚线+箭头(--->) ...use a...用(为函数中的参数)...
2019-09-27 15:12:50 3396
原创 [RTMP协议]RTMP块头报文
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。消息头MessageHeader消息类型:1byte,Message Type ID取值含义:A协议控制消息,Message Type ID = 1~6,主要用于协议内的控...
2019-08-05 16:43:39 2014 1
原创 [RTMP协议]RTMP设计思想
RTMP传输基本流程发送端把数据封装成消息(Message)。把消息分割成消息块(Chunk, 网络中实际传输的内容)。将分割后的消息块(Chunk)通过TCP协议发送出去。接收端:在通过TCP协议收到数据后, 先将消息块重新组合成消息(Message)。通过对消息进行解封装处理就可以恢复出数据。RTMP的突出优点是: 延时低,正常延时1~3秒,理想的话直播可控制在1秒...
2019-08-02 12:00:07 814
原创 [RTMP协议]常用直播流地址
RTMP、RTSP、HTTP这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、RTSP。而点播用 HTTP。播放软件推荐:VLC要播放视频直播流,或者测试一个直播视频地址是否可以使用。这里推荐 VLC 媒体播放器。功能强大且跨平台。支持 Windows、Mac OS、Linux、Android、iOS。...
2019-07-30 18:33:25 139948 1
原创 [OpenGL]变量限定符-参数限定符-精度限定符
存储限定符在声明变量时,应根据需要使用存储限定符来修饰,类似 C 语言中的说明符。GLSL 中支持的存储限定符见下表:限定符描述< none: default >局部可读写变量,或者函数的参数const编译时常量,或只读的函数参数attribute由应用程序传输给顶点着色器的逐顶点的数据uniform在图元处理过程中其值保持不变,由应用...
2019-07-19 16:46:55 1304
原创 [OpenGL]变量类型
OpenGL ES 的渲染管线包含有一个可编程的顶点阶段和一个可编程的片段阶段。其余的阶段则有固定的功能,应用程序对其行为的控制非常有限。每个可编程阶段中编译单元的集合组成了一个着色器。在OpenGL ES 2.0 中,每个着色器只支持一个编译单元。着色程序则是一整套编译好并链接在一起的着色器的集合。着色器 shader 的编写需要使用着色语言 GL Shader Language(GLSL),G...
2019-07-19 16:41:05 628
原创 [C++基础]C++11匿名函数Lambda表达式
#include <iostream>using namespace std;int main() { []() { cout << "hello, world" << endl; }(); auto add = [](int a, int b)->int{ return a + b; }; int...
2019-07-17 18:44:36 264
原创 [MQ]什么是消息队列?
什么是消息队列MQ(Message Queue)?消息(Message):传输的数据。队列(Queue):队列是一种先进先出的数据结构。消息队列从字面的含义来看就是一个存放消息的容器。消息队列可以简单理解为:把要传输的数据放在队列中。把数据放到消息队列叫做生产者从消息队列里边取数据叫做消费者一般来说,消息队列是一种异步的服务间通信方式,是分布式系统中重要的...
2019-06-22 22:18:58 14120
原创 [Lua]协调coroutine
协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。++线程与协同程序的主要区别在于++,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在***任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停***。一、lua协程函...
2019-06-19 22:53:19 583
原创 [设计模式]Strategy策略模式(二)
策略模式定义是:定义算法族,分别封装起来,让它们之间可以互相替换,算法的变化独立于使用算法的客户。我们来模拟一种情形来理解这句话。有一群鸭子,有各种颜色的鸭,他们有的会飞,有的不会飞,飞的姿态也更不相同。此时如果在每只鸭子里分别定义飞的姿态,那有成千上万中鸭子的时候就会累死。这时我们考虑使用设计模式来实现下它。设计原则中第一条:找出应用中可能需要变化之处,把它们独立出来。当然这里我们独立的就...
2019-06-17 22:41:06 239
原创 [cocos2dx]屏幕适配
由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题。为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 —开发者不需要考虑程序实际运行在什么分辨率下而只需要制定设置好设计分辨率就行,接着引擎便会自动实现设计分辨率(DesignSize)到屏幕分辨率(FrameSize)的转化,以及不同资源分辨率到设计分辨率的转化。1...
2019-06-16 19:45:52 770
原创 [设计模式]设计模式之依赖倒置原则
依赖倒置—依赖注入,控制反转**如果一个类A的功能实现需要借助于类B,那么就称类B是类A的依赖,如果在类A的内部去实例化类B,那么两者之间会出现较高的耦合,一旦类B出现了问题,类A也需要进行改造,如果这样的情况较多,每个类之间都有很多依赖,那么就会出现牵一发而动全身的情况,程序会极难维护,并且很容易出现问题。要解决这个问题,就要把A类对B类的控制权抽离出来,交给一个第三方去做,把控制...
2019-06-15 12:41:56 512
原创 [C++基础]虚继承实现原理
在C++中,我们会遇到virtual这个关键字,但是它有两种含义:虚函数和虚继承,它们两个是完全无相关的两个概念。什么是虚继承 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基...
2019-04-12 12:54:00 1330
原创 [C++基础]虚析构函数
虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一...
2019-04-07 23:36:24 590
原创 [C++基础]多态虚函数表详解
C++相对其他面向对象语言来说,之所以灵活、高效。很大程度的占比在于其多态技术和模板技术。C++虚函数表是支撑C++多态的重要技术,它是C++动态绑定技术的核心。多态对象创建及内存分布假设有一个基类ClassA,一个继承了该基类的派生类ClassB,并且基类中有虚函数,派生类实现了基类的虚函数。我们在代码中运用多态这个特性时,通常以以下两种方式来使用:(1) ClassA *a = ne...
2019-04-02 14:22:18 522
原创 [C++基础]宏定义中操作符(#,##)的使用
# 和 ## 在宏定义(define)中经常可以看到,是预编译过程中的常用语句##是一个连接符号,用于把参数连在一起 #是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串#define CONVERT(name) #name#define CAT(batman, robin) batman##robin#define make_friend(index) pr...
2019-04-01 20:48:15 1260
原创 [C++基础]强制转换运算符dynamic_cast
强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。语法: dynamic_cast < new-type> ( expression )该运算符把expression转换成new-type类型的对象。new-type必须是类的指针、类的引用或者void *;如果new-type是类指针类型,那么ex...
2019-03-30 17:30:35 839
原创 [C++基础]对象内存分布--虚继承
virtual在C++中最大的功能就是声明虚函数和虚基类。虚拟继承是为了解决多重继承下公共基类的多份拷贝问题。虚继承虚继承解决了菱形继承中对派生类拥有多个间接父类实例的情况。虚继承的派生类的内存布局与普通继承很多不同,主要体现在:虚继承的子类,如果本身定义了新的虚函数,则编译器为其生成一个虚函数指针(vptr)以及一张虚函数表。该vptr位于对象内存最前面。vs非虚继承:直接扩展父类虚...
2019-03-26 17:28:50 757 2
原创 [cocos2dx]Delegate委托设计模式
实现委托机制demo的情景描述:LayerA是一个层,里面有个sprite,一旦A被初始化,这个sprite就会执行一个action;LayerB是另一个层。我在LayerB中加入了LayerA,但是要等到A中的那个sprite的action执行完毕后,B再立刻执行另外一个方法。问题来了,我怎么在LayerB中知道LayerA中的sprite的action执行完了,那么解决的方法就是使用委托机...
2019-03-04 16:18:40 492 1
sqlite3API的封装
2013-07-17
远程文件下载--select模式
2013-05-31
Boost1.5.0
2012-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人