我在用J2SE做了个超级玛丽的游戏,但是不会做人物与地图的碰撞,求高手!!!裸奔+跪求!!j2se

解决方案 »

  1.   

    写一个getRect()方法 返回一个Rectangle 通过Rectangle 的 intersect方法实现碰撞检测
      

  2.   

    public Rectangle getRect() {
    return new Rectangle(x, y, WIDTH, HEIGHT);
    }
    根据现有对象返回他的一个方形区域
     this.getRect().intersects(t.getRect())
    若两个方形区域相交  则为碰撞
      

  3.   

    我们以前一起做过一个雷电游戏
    其中涉及到子弹与飞机碰撞的判断
    主要是判断子弹集合与飞机集合是否存在交集,
    子弹和飞机的坐标都是存放在一个list集合中
    当子弹与飞机碰撞,也就是他们的坐标一致,希望对你有所启发//判断两类小球是否发生碰撞,如果碰撞了就把这两个小球都删掉
    for(int i=0;i<allBalls.size();i++){
    for(int j=0;j<allSnows.size();j++){
    if( i<allBalls.size()&&
    allBalls.get(i).isTouch(allSnows.get(j))  ){
    allBalls.remove(i);
    allSnows.remove(j);
    }
    }
    }
      

  4.   

    正如二楼所说一般是通过Rectangle的intersects()方法做
    一个略为粗糙的碰撞检测(不规则物体碰撞)
    1、通过Rectangle来实现碰撞检测:(适用于规则矩形)
     
    /* 判断子弹是否击中障碍物 */
    public boolean isHit(com.Alex.map.Map map) {
    boolean flag = true;// 代表没有撞到
    // 分类别的得到所有的障碍物
    List<Stuff> stuffList = new Vector<Stuff>();
    stuffList.addAll(map.getBricks());
    stuffList.addAll(map.getIrons());
    stuffList.addAll(map.getWaters());
    for (int i = 0; i < stuffList.size(); i++) {
    Stuff a = stuffList.get(i);
    Rectangle tankRectangle = new Rectangle(bullet2.getRec());
    Rectangle stuffRectangle = new Rectangle(a.getX(), a.getY(), 20, 20);
    if (stuffRectangle.intersects(tankRectangle)) {
    flag = false;// 撞到了
    break; } }
    return flag;
    }
    2、矩形与圆形之间的碰撞做个小图来看 小圆有个运动轨迹,轨迹的线如果和他对着的正方形的相对某一象限的边有焦点,那么就能碰撞,边就是那一个象限的边(还要把圆半径算进去)
    3、不规则形状的碰撞检测
      这点比较复杂,楼主可以google、baidu
      提供一些参考资料:
     http://www.tink.ws/blog/as-30-hittest/
     http://www.cnblogs.com/Kurodo/archive/2012/08/08/2628688.html
    楼主可以简单的采用第一种方式,
    超级玛丽游戏的图形还是较为规则的方形的
    不过在图片处理的时候尽量将图片边角的空白去掉
    不然碰撞检测不准确。
      

  5.   


    getRect()方法也要知道是哪边发生碰撞啊,比如右边发生碰撞就不能再向右走getRect()方法只能知道碰撞了而已。