果實顏色判斷出錯
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錯誤