修復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個小時!好在慶幸,已經解決。
    • 這個給個人警示:必定要注意數據備份,這個項目不出問題是不出問題,一出問題就不是一兩個小時能夠解決的!

相關文章
相關標籤/搜索