果實顏色判斷出錯
rt,應該是collision中判斷fruit.type[i]時出現的問題,有時大魚吃到橙色果實時score.double會置2,有時吃到藍色果實double會置1,因為魚身顏色是根據score.double判斷的,因此也會出現吃到橙色果實時變藍,吃到藍色果實變紅的情況。
collision代碼如下,求解,多謝各位了
function?collision(){ for(var?i?=?0;?i?<?fruit.num;?i++){ if(fruit.alive[i]){ //calculate?dist var?dist?=?calLength2(mom.x,?mom.y,?fruit.x[i],?fruit.y[i]); if(dist?<?200){ //eaten fruit.dead(i); fruit.born(i); //score.fruitNum?=?score.double?==?2??2?*?score.fruitNum?:?score.fruitNum?+?1; score.fruitNum++; mom.bigBodyCnt?=?mom.bigBodyCnt?>=?7???7?:?mom.bigBodyCnt?+?1; //score.double?=?fruit.type[i]?==?"blue"??2?:?1; //?????????note:?sometimes?the?double?doesn't?work console.log("fruit["?+?i?+?"]:?"?+fruit.type[i]); if(fruit.type[i]?==?"blue"){ score.double?=?2; } } } } } function?fishCollision(){ var?dist?=?calLength2(mom.x,?mom.y,?child.x,?child.y); if(dist?<?900){ //child?recover child.childBodyCnt?=?0; //score?reset??????? mom.bigBodyCnt?=?0; score.addScore(); //score.reset(); } }
==============================
剛剛對每個被吃掉的果實類型進行了打印,發現有些的顏色和type里的blue/orange對不上,懷疑也許是由于我的fruit再生不是用的老師的monitor機制,而是被吃掉或飄出屏幕就執行dead()然后born()。但是感覺這期間也對fruit.type進行了重新初始化,不該有錯啊。
fruitObj.prototype.draw?=?function(){ for(var?i?=?0;?i?<?this.num;?i++){ if(this.alive[i]){ var?pic?=?this.type[i]?==?"blue"??this.blue?:?this.orange; if(this.size[i]?<=?15){ //grow this.size[i]?+=?this.spd[i]?*?interval; }else{ this.y[i]?-=?this.spd[i]?*?7?*?interval; } ctx2.drawImage(pic,?this.x[i]?-?this.size[i]?*?0.5,?this.y[i]?-?this.size[i]?*?0.5,?this.size[i],?this.size[i]); if(this.y[i]?<?-10){ this.dead(i); this.born(i); } } } } fruitObj.prototype.born?=?function(i){ var?weedId?=?Math.floor(Math.random()?*?weed.num); this.x[i]?=?weed.x[weedId]?; this.y[i]?=?canHeight?-?weed.len[weedId]; this.size[i]?=?0; var?ran?=?Math.random(); this.type[i]?=?ran?<?0.2???"blue"?:?"orange"; this.alive[i]?=?true; } fruitObj.prototype.dead?=?function(i){ this.alive[i]?=?false; this.type[i]?=?"" }
2017-12-17
已解決,因為在collision中先重新born了新的fruit再判斷的顏色,順序錯了,導致有可能新生成的fruit顏色與之前的不同,令score.double錯誤