怎么实现人物与地图的碰撞检测?? 我在用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 书籍下载 谁帮帮我? 判断当前时间是不是在一个时间段里,高手请进 请问谁用过JUnit进行过软件测试?请帮忙 如何把LINUX与JAVA结合起来呢? 关于>>>的简单问题 请高手推荐1-3本学习 JAVA的好书。常用VC,想学一下JAVA. 为什么我的IE总是找不到com.sum.java.swing.JScrollPane? 网络文件传输问题 求一方法
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()方法只能知道碰撞了而已。