闭包:
隔离上下文
创建新的作用域
Class模块化
什么是draw call? 为什么减少draw call可以优化游戏速度。如何减少draw call? 在creator中如何做
【参考答案】cpu向gpu提交一次绘制的图元(顶点)集合即为draw call。draw call太多就会让gpu反复切换渲染状态,cpu需要不断提交数据到gpu,降低帧数。减少draw call就要对需要绘制的图元进行合并,这样就要保证这些图元的渲染状态(材质)是一样的,且这些图元必须是在一起绘制的(中间不要插入别的材质的图元)。在creator中可使用图集合并工具如texture packer将sprite合并成到一张贴图上,并且安排节点的绘制顺序,将使用同一张贴图的节点放到一起绘制。
说说对 prototype和 __proto __ 的理解
【参考答案】prototype是函数才有的属性,prototype本身也是个函数对象;__proto __是所有对象都有的属性,__proto __指向构造它的对象的对象的prototype。例如:
> var o = new Object() o.__proto__ == Object.prototype < true
o是Object构造出的对象,o的__proto __指向Object的prototype,这样o可以使用Object.prototype里面的方法。原型链:当js查找对象的属性时,先查找对象自身是否具有该属性,如果没有,就会去__proto __指向的prototype对象上查找,直到找到或者__proto __为null
使用构造函数实现一个类Foo,需要有属性 count, 方法bar(), 并且写出创建该类对象的方法
【参考答案】
function Foo(){ this.count = 0; } Foo.prototype.bar = function(){ } var foo = new Foo(); foo.bar();
onLoad 组件首次激活时触发 start 组件第一次执行update之前触发 update 每一帧渲染前调用 lateUpdate 所有组件update调用后调用 onDestroy 组件或所在节点调用了destroy()时调用,并在当前帧结束时统一回收组件 onEnable 组件的enabled属性从false变为true时 onDisable 组件的enabled属性从true变为false时
cocos中sprite的Blend属性,Src Blend Factor设置为 SRC_ALPHA, Dst Blend Factor设置为 ONE_MINUS_SRC_ALPHA是什么意思,有什么作用?
【参考答案】这表示绘制这个Sprite时,和Frame buffer上面已经有的像素进行混合的公式参数。以上参数设置的公式为: FinalColor = SpriteColor(RGB) * SpriteAlpha + BufferColor(RGB) * (1-SpriteAlpha)。效果是标准的透明图元渲染。
闭包简单来说就是函数中的函数,也可以把它理解为一种现象,就是说一个函数要访问另外一个目标函数内部的变量,就要在目标函数中再定义一个函数(以此来把作用域链往下延长一段,目的就是为了利用js在找自由变量时,会沿着作用域链一级一级往上找的特点),并将这个定义的函数return出来,供外部使用。在实际开发中,闭包主要是用来封装变量,收敛权限。
function isFirstLoad(){ var list=[]; return function(option){ if(list.indexOf(option)>=0){ //检测是否存在于现有数组中,有则说明已存在 console.log('已存在') }else{ list.push(option); console.log('首次传入'); //没有则返回true,并把这次的数据录入进去 } } } var ifl=isFirstLoad(); ifl("zhangsan"); ifl("lisi"); ifl("zhangsan");