高手请进,坦克大战碰撞问题
环境:MIDP2.0 WTK2.2
问题:当子弹打到砖块时,下面的碰撞处理方法有错误,根据坦克的位置不同,发出子弹后与砖块碰撞时会计算出错误的砖块(相临的砖块,与实际碰撞的砖块不一致),行(列)号会比实际碰撞的砖块多(少)1.并不是一直都计算错误,根据坦克的位置不同,错误也不同(行或者列号错误).
子弹继承的Sprite类,砖块为TiledLayer
子弹自身图片为:3*3
子弹的初始坐标为:
setPosition(mx + 6, my + 6);// mx,my为坦克当前坐标座标
子弹的移动速度为:2
每个砖块大小为:15*15;cell数组为11*11
碰撞处理方法为://此方法在子弹的类中实现
if (this.collidesWith(MicroTankCanvas.mBoard, true))//是否打到砖块,打到了砖块就消失
{//row,colum为cell数组中的行号和列号
row = (this.getY() + 1) / 15; // 15是每张贴图(小砖块)的像素 (长=宽=15)
column = (this.getX() + 1) / 15;//除以15就可以落在整行与整列上
MicroTankCanvas.mBoard.setCell(column, row, 0);//第3个参数为0,则表示透明,此为对某个单元格操作,mBord为TiledLayer对象作为游戏背景
setVisible(false);//打中后当前子弹就不可见了
this.alive = false;//打中后,此子弹就没命了,定为false,就可以继续发下一颗
Thread.yield();
}
例如:当坦克的位置为:113,75(x,y)
子弹碰撞时的位置为:119,136
处理后打到的砖块为:9,8(row,colum)
实际打到的砖块为:9,7
而当坦克的位置为:111,79时,子弹碰撞时的位置为:117,135 此时处理正确
望高手指点解决方法,更好的碰撞处理或改进这个碰撞处理,不胜感激!
------解决方案--------------------http://www.dullwolf.cn/collapse.html
多边形的碰撞检测算法