该总结的已总结,这篇主要说说最佳实践和 解决问题的思路,以及拾遗。
最佳实践:
cocos项目开发:
1. 组织 config.js 用来存储配置; data.js用来存储全局数据;用module.exports导出
2. 每个场景的节点Canvas 作为根节点并且名字就是 Canvas ;场景脚本作为Canvas的组件;
3.场景名称和 脚本名称一样,如:场景名称game 脚本名称也为game.js。目的是方便消息的事件分发到对应脚本中。
4. 游戏时间控制:要使用实时时间 精确到毫秒,注意和游戏倒计时不同:代码如下:
gamedata.lastGameSeconds = config.gameSecondsLimit; //2分钟
gamedata.startTimestamp = (new Date()).getTime() ;
gamedata.endTimestamp = gamedata.startTimestamp + config.gameSecondsLimit * 1000;
gateway :
1. 本机环境注意 :虚拟机使用桥接方式最好,因为这样可以用手机扫码做测试。不然用手机扫码是无法和本机大屏进行通信的!
2. 开发阶段在 screen_login 中注释掉:
// if(Gateway::isUidOnline(self::$_screenUid)){ 开放去掉,上线 打开
// return false;
// }
避免低级错误:
1. 如 javascript 基本语言语法问题 如: 判断 属性 in 对象
if( !( name in obj){...} 注意加上括号。
creator 开发工具使用:
1. 打包时 ,关掉 php websocket服务。
解决问题思路:
1. 多看看 官网手册, 其次百度
2. 遇到一个问题是也许是解决不完美,或是个坎,不要陷进去,先做别的,过几天再回来做,完善。
说到这里说个具体例子: 一开始 手机端摇一摇存在手机倾斜某些位置 ,分数一秒增加二三十次,在最后一两天也得到了解决,代码:如下:
onDeviceMotionEvent :function (event) {
var nowGX = event.acc.x.toFixed(2);
var nowGY = event.acc.y.toFixed(2);
var nowGZ = event.acc.z.toFixed(2);
this.x_arr.push(nowGX);
this.y_arr.push(nowGY);
if(this.x_arr.length > 8 ){
var is_get = this._isGetScore(this.x_arr,this.y_arr);
if(is_get){
this.score += 1;
this.scoreDisplay.string = this.score.toString();
}
this.x_arr = [];
this.y_arr = [];
}
},
_isGetScore(x_arr,y_arr){
var stand = 0.05;
var x_gt = 0;
var x_lt = 0;
var y_gt = 0;
var y_lt = 0;
for(var i=0; i < x_arr.length ; i++){
if(x_arr[i] > stand){
x_gt = 1;
}
if(x_arr[i] < -stand){
x_lt = 1;
}
}
for(var j=0; j < y_arr.length ; j++){
if(y_arr[j] > stand){
y_gt = 1;
}
if(y_arr[j] < -stand){
y_lt = 1;
}
}
return (x_gt && x_lt) || (y_gt && y_lt);
},
也许不是最完美的,比起刚开始代码好太多了,满足了需求。
这个小游戏只用到了cocos一小部分知识,像碰撞,复杂的动画,等等还没用到。游戏逻辑也比较简单。要想真正熟练cocos开发还有很长路要走。cocos websocket 封装还有待完善。另外后端php websocket也有很大的改善空间。
如果这个项目一系列的博客,能够帮助到你,我很开心,其中一些问题的处理肯定有不是很好的地方,大神看到了,也欢迎留言交流。
moveTo (时间,坐标)
注意时间要和下一次调用moveTo间隔差不多,如都是0.2秒,不然调用间隔 0.2,时间参数是2,就会出现倒退,闪现乱动现象