為什么把a(bǔ)liveUpdate里更新的內(nèi)容在update內(nèi)效果就不好呢?
如果把代碼修改為這樣
starObj.prototype.update?=?function()?{ //?body... this.timer?+=?deltaTime; this.x?+=?this.xSpd*deltaTime*0.002; this.y?+=?this.ySpd*deltaTime*0.002; //判斷是否出了canvas邊界,如果出了邊界就重置 if(this.x?<?100?||?this.x?>?700?||?this.y?<?150?||?this.y?>?450){ this.init(); return; } if(this.timer?>?100){ this.picNo?+=?1; this.picNo?=?this.picNo%7; this.timer?=?0; } if(switchy){ life?+=?0.03*deltaTime*0.05; if(life>1){ life?=?1; } }else{ life?-=?0.03*deltaTime*0.05; if?(life<0)?{ life?=?0; } }};function?aliveUpdte(){}
效果會差很多,想知道為什么
2019-11-17
就我個人學(xué)完這個課程之后的收獲來解答這個問題,之所以效果會變得很差,首先的一個原因是由于將做整體aliveUpdate的內(nèi)容放入到具體每一個obj后執(zhí)行的次數(shù)會大大增加,從原來的每一次動畫判斷一次life到現(xiàn)在的每一次動畫都要在每一個星星中判斷l(xiāng)ife,進(jìn)而導(dǎo)致效率變慢,執(zhí)行一次所需的時間大大增長。再而我們運用resquestAnimationFrame函數(shù),其中的deltatime由于運行時間大大增長導(dǎo)致其值較大, 0.03×deltatime×0.05的值直接就大于1。因此到最后的效果不是差,只不過漸變效果優(yōu)于時間間隔太長已經(jīng)變成很僵硬的跳轉(zhuǎn)而已。同學(xué)這這個想法的初衷應(yīng)該是想讓代碼更簡潔,只不過在實際運用過程中,代碼的運行效率應(yīng)該更多地被考慮