怎么实现人物与地图的碰撞检测?? 我在用J2SE做了个超级玛丽的游戏,但是不会做人物与地图的碰撞,求高手!!!裸奔+跪求!!j2se 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写一个getRect()方法 返回一个Rectangle 通过Rectangle 的 intersect方法实现碰撞检测 public Rectangle getRect() { return new Rectangle(x, y, WIDTH, HEIGHT); }根据现有对象返回他的一个方形区域 this.getRect().intersects(t.getRect())若两个方形区域相交 则为碰撞 我们以前一起做过一个雷电游戏其中涉及到子弹与飞机碰撞的判断主要是判断子弹集合与飞机集合是否存在交集,子弹和飞机的坐标都是存放在一个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); } } } 正如二楼所说一般是通过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楼主可以简单的采用第一种方式,超级玛丽游戏的图形还是较为规则的方形的不过在图片处理的时候尽量将图片边角的空白去掉不然碰撞检测不准确。 getRect()方法也要知道是哪边发生碰撞啊,比如右边发生碰撞就不能再向右走getRect()方法只能知道碰撞了而已。 java一道题目,求大牛指导try的return和finally jar文件如何读同目录下文件 急救~进销存日期选择框的实现 一个递归问题 外国一家公司的一道超难推理面试题,如果你做对了,直接录取拿5K以上的工资不成问题!!!!!! 怎么写配置文件 紧急求助 请问jbuilder做的appliction,我要用java运行时怎么弄 queryDataSet4.setBigDecimal 如和把String转变成BigDecimal?????? 能帮帮我吗,关于以后的路怎么走? 网络文件传输问题 求一方法
return new Rectangle(x, y, WIDTH, HEIGHT);
}
根据现有对象返回他的一个方形区域
this.getRect().intersects(t.getRect())
若两个方形区域相交 则为碰撞
其中涉及到子弹与飞机碰撞的判断
主要是判断子弹集合与飞机集合是否存在交集,
子弹和飞机的坐标都是存放在一个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);
}
}
}
一个略为粗糙的碰撞检测(不规则物体碰撞)
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
楼主可以简单的采用第一种方式,
超级玛丽游戏的图形还是较为规则的方形的
不过在图片处理的时候尽量将图片边角的空白去掉
不然碰撞检测不准确。
getRect()方法也要知道是哪边发生碰撞啊,比如右边发生碰撞就不能再向右走getRect()方法只能知道碰撞了而已。