问题1:三消游戏消除方快,将数组中的清除这块还有些不理解?
解决方案:将三消游戏看了一遍,找出以下代码:
filterDelSame:function(arr1,arr2){
var returnArr = arr1.concat(arr2) //合并数组 for(var i = 0 ;i<returnArr.length;i++){ var nowPo = returnArr[i] for(var j = i+1 ;j<returnArr.length;j++){ if(cc.pSameAs(returnArr[j],nowPo)){ //对于cc.pSameAs有些不理解 returnArr.splice(j,1) //裁剪数组中j元素 j-- // 上面删除了一个元素,下标需要减一 } } } return returnArr //返回这个数组 },
问题2:如何提高一个函数的复用性?
解决方案:网上查阅资料:
代码复用
,顾名思义就是对曾经编写过的代码的一部分甚至全部重新加以利用,从而构建新的程序。在谈及代码复用的时候,我们首先可以想到的是继承性
。代码复用的原则是:
优先使用对象组合,而不是类继承
在js中,由于没有类的概念,因此实例的概念也就没多大意义,js中的对象是简单的键-值对,可以动态的创建和修改它们。
但在js
中,我们可以使用构造函数和new
操作符来实例化一个对象,这与其他使用类的编程语言在语法上有其相似之处。
例如:
var trigkit4 = new Person();
js
在调用构造函数Person
时似乎看起来是一个类,但其实际上仍然是一个函数,这让我们产生了一些假定在类的基础上的开发思路和继承模式,我们可以称之为“类式继承模式”。
传统的继承模式是需要class
关键字的,我们假定以上的类式继承模式为现代继承模式
,这是一种不需要以类的方式考虑的模式。
问题3:精灵和layer?
解决方案:自己查阅资料:这个关乎到js中层级的关系,一个layer层可以创建很多个精灵对象,而一个精灵对象只能对应一个layer层
问题4:回调函数?
解决方案:查阅资料:
回调就是一个函数调用过程,比如函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。
//递归也算是回调函数吧,我查阅的资料说回调应该尽量避免使用递归?
问题5:拼图游戏中的裁剪
解决方案:查阅资料
在我们的拼图游戏中使用了cc.rect,rect类可以创建矩形裁剪区
var imgWidth = bgSp.width/NUM //取得一块儿宽 var imgHeight = bgSp.height/NUM //取得一块儿高 cc.log(bgSp.width);
for(var i = 0; i < NUM; i++){ for(var j = 0; j < NUM; j++){ var cellSp = new Cell("res/"+this._randompic+".png", //加载需要裁剪的图片 cc.rect(i*imgWidth,j*imgHeight,imgWidth,imgHeight), //将设置好的宽高进行裁剪 cc.p(bgSp.x + i*imgWidth, bgSp.y + (bgSp.height>>1)-j*imgHeight), this.checkAllCellReachTarget.bind(this) ) cellSp.setPosition(760+Math.random()*8.,235+Math.random()*200) //将裁剪好的碎片随机显示在一个范围内 this._cellArr.push(cellSp) this._Panel.addChild(cellSp,0); } } },