修复bug及修复过程

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

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

    • 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个小时!好在庆幸,已经解决。
    • 这个给个人警示:必定要注意数据备份,这个项目不出问题是不出问题,一出问题就不是一两个小时能够解决的!

相关文章
相关标签/搜索