『壹』 java判断飞行物之间碰撞有几种方法可以
这属于碰撞检测问题。
1、简单的2D的物体:
物体形状一般可以设定为矩形区域,这版类规则图形。它的权碰撞检测可以通过java API中的
Rectangle类来实现碰撞的检测。
2、复杂点的:像素级别的碰撞检测
像素级别的碰撞检测算得上是最精确的碰撞检测方法了。
首先遍历算出一张位图所有的像素点坐标,然后与另外一张位图上的所有点坐标进行对比,
一旦有一个像素点的坐标相同,就立刻取出这两个坐标相同的像素点,通过位运算取出这两个
像素点的最高位(透明度)进行对比,如果两个像素点都是非透明像素则判定这两张位图发生
碰撞。
『贰』 Java像素碰撞检测原理
Java像素碰撞检测原理大体分为基于屏幕像素颜色检测,当移动的目标坐标像素的颜色与目标颜色相同时为发生碰撞。坐标检测,就是维持各感兴趣物体的坐标数据,判断二者坐标相同时为发生碰撞。可以使用ActionScript3.0自带bitmapdata功能对像素级碰撞检测:
package
{
importflash.display.Bitmap;
importflash.display.BitmapData;
importflash.display.Shape;
importflash.display.Sprite;
importflash.display.StageAlign;
importflash.display.StageScaleMode;
importflash.events.Event;
importflash.events.MouseEvent;
importflash.filters.GlowFilter;
importflash.geom.Matrix;
importflash.geom.Point;
[SWF(width="1000",height="600")]
{
privatevarbd1:Bitmap;
privatevarbd2:Bitmap;
publicfunctionBitbdhitest()
{
super();
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
init();
}
privatefunctioninit():void
{
varbdp1:BitmapData=newBitmapData(100,100,true,0);
bdp1.draw(getstar(50),newMatrix(1,0,0,1,50,50));
bd1=newBitmap(bdp1);
bd1.x=200;
bd1.y=200;
this.addChild(bd1);
varbdp2:BitmapData=newBitmapData(100,100,true,0);
bdp2.draw(getstar(50),newMatrix(1,0,0,1,50,50));
bd2=newBitmap(bdp2);
this.addChild(bd2);
this.addEventListener(Event.ENTER_FRAME,onMouseMove)
}
privatefunctiononMouseMove(e:Event):void
{
bd2.x=mouseX-50;
bd2.y=mouseY-50;
if(bd1.bitmapData.hitTest(newPoint(bd1.x,bd1.y),1,bd2.bitmapData,newPoint(bd2.x,bd2.y),255))
{
bd1.filters=[newGlowFilter];
bd2.filters=[newGlowFilter];
}
else
{
bd1.filters=[];
bd2.filters=[];
}
}
privatefunctiongetstar(_r:Number):Sprite
{
var_star:Sprite=newSprite;
_star.graphics.lineStyle(0);
_star.graphics.moveTo(_r,0);
for(vari:int=1;i<11;i++)
{
varr2:Number=_r;
if(i%2>0)
{
r2=_r/2;
}
varangle:Number=Math.PI*2/10*i;
_star.graphics.lineTo(Math.cos(angle)*r2,Math.sin(angle)*r2);
}
return_star;
}
}
}
『叁』 在java编写坦克大战游戏时,如何判断两辆坦克不能重叠运动,有什么简单的算法
对于这个小游里面的类的抽象很重要,对坦克及其它类我在这里面就不定义了,其实J2SE的API里面就有关于图形重叠的算法,就是这个intersects()方法,具体伪代码如下:
public boolean collidesWithTanks(java.util.List<Tank> tanks) {
for(int i=0; i<tanks.size(); i++) {
Tank t = tanks.get(i);
if(this != t) {
if(this.live && t.isLive() && this.getRect().intersects(t.getRect())) {
this.stay();
t.stay();
return true;
}
}
}
return false;
}
您可以根据自己的实际需求来改写,在我的网络文库里面有关于“坦克大战”的所有代码,如果有需要我可以把代码发给你,可以通过网络HI联系我。
『肆』 JAVA Swing写了一个飞机大战小游戏,可是遇到了不会写碰撞检测的问题
敌机和 本机都添加一个Rectangle对象 Rectangle的坐标随自身移动 多线程检测 敌机集合的Rectangle是否与本机相撞 检测方法是检测一个Rectangle的四个角是否与在一个Rectangle的域中 或者直接用Rectangle的contains(Rectangle r) 检测两个Rectangle是否相交
『伍』 Java中,如何实现碰撞检测
通过三角函数可以算直线所占用的矩形中的透明像素,判断两者是否碰撞的时候算一下是不是非透明像素碰撞就行了
『陆』 这个用 “java条件语句”该怎么写
给个最简单的碰撞检测你:
public Rectangle getRect() {
return new Rectangle(x, y, w, h);
}
public Rectangle getRect1() {
return new Rectangle(x1, y1, w1, h1);
}
if (this.getRect().intersects(this.getRect1())) { }