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

  • 相关阅读:
    React 进修之路(1)
    requireJS的配置心得
    DOM的内部插入和外部插入
    h5移动端设备像素比dpr介绍
    原生js--事件类型
    React 进修之路(3)
    javaScript
    html&css
    MyBatis
    Maven基础
  • 原文地址:https://www.cnblogs.com/inuyasha1314/p/9198292.html
Copyright © 2020-2023  润新知