修复bug及修复过程

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

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

    • GameOver场景(有bug)
      1283654-20180619135644966-1910231608.jpg
    • 是黑屏,IE浏览器给的问题反馈是:
      1283654-20180619135733539-70194725.jpg
  • 解决方案
    • 解决原理,本地存储的数据,发布到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.左上方音乐点击“没反应”问题

  • 问题细节:
    • 请看如下图片
      1283654-20180619161710739-1918217081.jpg
    • 红圈中的喇叭,要实现的功能是:点击,关闭背景音乐,再次点击打开背景音乐。
    • 这个问题,我们采坑了!找了半天,才发现,数据捕捉有问题。
    • 最初使用的函数是一下这个,(有bug的)
          var rec = cc.rectEqualToRect(this.node.getBoundingBoxToWorld(),pos) ;
    • 官网上面对他的定义是:
      1283654-20180620144914932-1222721735.jpg
    • 判断手触摸的位置和喇叭所在区域是否相等,相等就更改当前音乐状态,多正常的逻辑!
    • 找了好多方案,真的是行不通啊!最后的最后,我们换了个函数,讲上面的代码更换为,如下:
          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. 数据冲突导致的“致命”大问题!!

    • 我之所以后悔自己没有做好“数据备份”的原因也就在这里!
    • 这个问题,是我遇到的一个重大号问题!就在周二下午,当我默默庆幸,软工已经昨晚的时候,打算打开构建面板进行发布的时候,发现构建面板居然发布了!!!我的所有数据,几乎已经完成了的数据,都在这个上面!!!我查了一些资料,发现是由于新旧数据冲突导致面板打不开,我尝试删掉一些东西。但发现,已删除就出错,各种错误!
      1283654-20180620150139168-1426655196.jpg
    • 解决办法:现在“零件”已经有了,再重新“组装一遍不就行了” ,说的轻松,真正实践起来远没有这么简单,这个“致命问题”修复了不下5个小时!好在庆幸,已经解决。
    • 这个给我的警示:一定要注意数据备份,这个项目不出问题是不出问题,一出问题就不是一两个小时可以解决的!

转载于:https://www.cnblogs.com/inuyasha1314/p/9198292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值