修复bug及修复过程

1.本地存储数据显示不出问题

  • 问题细节:
    • 本地使用如下语句存储成绩,"ScoreDisplay"为键,值为this.score.toString(),但是在cocos creator 预览一切正常,构建发布之后,问题就出现了!
cc.sys.localStorage.setItem("ScoreDisplay",this.score.toString());
- 游戏GameOver之后,不能加载出来得分情况场景
- Gameing场景

- GameOver场景(有bug)


- 是黑屏,IE浏览器给的问题反馈是:

  • 解决方案
    • 解决原理,本地存储的数据,发布到web Mobile 或者是Web Desktop之后,网页上是存储不了数据的,所以才会导致前面的错误。
    • 本地存储数据的功能:内部有好多js文件分别控制着不同的scene场景,Gaming和GameOver就是两个场景,在场景切换的时候,在Gaming里面的得分数据也会带到GameOver场景,能实现数据的这种传递功能的,就是使用本地存储。
    • 解决办法:既然使用本地数据的方式去传递会出错,那么,换一种方式,使用全局变量呢?几经尝试,终于使用全局变量的方式解决!
    • 解决之后的Gaming场景中的gainScore逻辑如下:
    gainScore:function (pos) {  
        window.score += 1;
        this.scoreDisplay.string = window.score.toString();
        //cc.sys.localStorage.setItem("ScoreDisplay",this.scoreDisplay.string);
        var fx = cc.instantiate(this.scoreFXPrefab).getComponent('ScoreFX');
        this.node.addChild(fx.node);
        fx.node.setPosition(pos);
        fx.play();
        cc.audioEngine.playEffect(this.scoreAudio,false);
    },
- GameOver场景中的更新积分的逻辑如下:(由原来的从本地存储的变量中获取的数据,变成了从全局变量中获取)
    disScore: function () {
        //this.score =  cc.sys.localStorage.getItem("ScoreDisplay");
        this.score = window.score;
        this.Scores.string = "Score: " + this.score.toString();//显示
    },

2.左上方音乐点击“没反应”问题

  • 问题细节:
    • 请看如下图片
    • 红圈中的喇叭,要实现的功能是:点击,关闭背景音乐,再次点击打开背景音乐。
    • 这个问题,我们采坑了!找了半天,才发现,数据捕捉有问题。
    • 最初使用的函数是一下这个,(有bug的)
        var rec = cc.rectEqualToRect(this.node.getBoundingBoxToWorld(),pos) ;
- 官网上面对他的定义是:


- 判断手触摸的位置和喇叭所在区域是否相等,相等就更改当前音乐状态,多正常的逻辑!
- 找了好多方案,真的是行不通啊!最后的最后,我们换了个函数,讲上面的代码更换为,如下:

        var rec = cc.rectContainsPoint(this.node.getBoundingBoxToWorld(),pos) ;
- 终于问题解决了。
- ### 无bug版本的声音开关逻辑如下:
    setCp:function(pos){

        var rec = cc.rectContainsPoint(this.node.getBoundingBoxToWorld(),pos) ;
     
        if(rec){
            if(this.isOpen){
                cc.audioEngine.pauseMusic();
                cc.log("暂停正在播放音乐");
                this.isOpen = false;
                }
            else {
              cc.audioEngine.resumeMusic ();
              cc.log("恢复背景音乐");
              this.isOpen = true;
             }
             
        }
    },

3. 数据冲突导致的“致命”大问题!!

- 我之所以后悔自己没有做好“**数据备份**”的原因也就在这里!
- 这个问题,是我遇到的一个重大号问题!就在周二下午,当我默默庆幸,软工已经昨晚的时候,打算打开**构建面板进行发布的时候**,发现**构建面板居然发布了!!!**我的所有数据,几乎已经完成了的数据,都在这个上面!!!我查了一些资料,发现是由于**新旧数据冲突导致面板打不开**,我尝试删掉一些东西。但发现,已删除就出错,各种错误!


- 解决办法:现在“零件”已经有了,再重新“组装一遍不就行了” ,说的轻松,真正实践起来远没有这么简单,这个“致命问题”修复了不下5个小时!好在庆幸,已经解决。
- ### 这个给我的警示:一定要注意数据备份,这个项目不出问题是不出问题,一出问题就不是一两个小时可以解决的!

posted @ 2018-06-19 14:01  砯冰  阅读(825)  评论(0编辑  收藏  举报