日期:2014-05-20  浏览次数:20702 次

高手请进,坦克大战碰撞问题
环境: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
多边形的碰撞检测算法