我创建了一个瓦片和粒子游戏(在代码中称为单元),在它们创建的边界内弹跳。粒子随机移动并改变。当他们遇到0块(看起来是黑色)时,它们会反弹。
然而,有时我的碰撞检测失败并且它们卡在0块中。发生这种情况时,粒子会被传送到屏幕中间。对于单个粒子来说,它很少发生,但如果有足够的粒子,你可以经常看到它。
按z清除任何粒子
使用鼠标左键单击制作一个空的4x4盒子。
将光标置于制作框内。
等待f。这将创建新的粒子。由于碰撞检测失败,你很快就会看到其中一些传送到中间。
检测与0块冲突的代码位于函数unitlogic:
中if(insidemap(num)){
// 0 tile below unit
if(ontile.ytile+1<mapArray.length && mapArray[ontile.ytile+1][ontile.xtile]==0 && units[num].y>ontile.ytile*20+16-units[num].yspeed){
units[num].yspeed = -units[num].yspeed;
units[num].direction = 0;
}
// 0 tile left to unit
else if(mapArray[ontile.ytile][ontile.xtile-1]==0 && units[num].x<ontile.xtile*20+4-units[num].xspeed){
units[num].xspeed = -units[num].xspeed;
units[num].direction = 1.8;
}
// 0 tile right to unit
else if(mapArray[ontile.ytile][ontile.xtile+1]==0 && units[num].x>ontile.xtile*20+16-units[num].xspeed){
units[num].xspeed = -units[num].xspeed;
units[num].direction = -1.8;
}
// 0 tile above unit
else if(ontile.ytile-1>=0 && mapArray[ontile.ytile-1][ontile.xtile]==0 && units[num].y<ontile.ytile*20+4-units[num].yspeed){
units[num].yspeed = -units[num].yspeed;
units[num].direction = 3.6;
}
// unit is where it is not supposed to be and is put in the center
else if(mapArray[ontile.ytile][ontile.xtile]==0){
units[num].x=400;
units[num].y=400;
}