『壹』 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())) { }