2012-11-12 20 views
0

我已經做了改造和渲染的多邊形物體與它(網格類型的多邊形):如何申請轉變爲多邊形對象的Java

at.setToTranslation(gameObject.position.x, gameObject.position.y); 
    at.rotate(Math.toRadians(rotation)); 
    at.scale(scale, scale); 
    g2d.setTransform(at); 
    g2d.fillPolygon(mesh); 

現在我想回到確切網我變得如此我可以對它進行碰撞檢查。唯一的問題是,如果我返回網格它返回未轉換的網格。所以我嘗試設置像這樣將變換多邊形物體(目):

mesh = (Polygon)at.createTransformedShape(mesh); 

可惜at.createTransformedShape()返回只能澆鑄Path2D.Double一個形狀。所以如果有人知道如何將Path2D.Double轉換爲多邊形或知道另一種方法來設置網格的轉換,請幫助。

+0

什麼語言? Java的? –

+0

您應該指定您正在使用的語言(作爲標籤),也可能是您正在使用的庫。它看起來像Java + Swing,但許多語言看起來有點像Java。 –

+0

是的java。對象是java.awt.geom.AffineTransform和java.awt.Polygon – user1494136

回答

1

如果AffineTransform#createTransformedShape不提供Polygon S中期望的結果(因爲它似乎是這樣),你可以分割成PolygonPoint S,變換每個Point並結合成一個新的Polygon。試試:

//Polygon mesh 
//AffineTransform at 

int[] x = mesh.xpoints; 
int[] y = mesh.ypoints; 
int[] rx = new int[x.length]; 
int[] ry = new int[y.length]; 

for(int i=0; i<mesh.npoints; i++){ 
    Point2d p = new Point2d.Double(x[i], y[i]); 
    at.transform(p,p); 
    rx[i]=p.x; 
    ry[i]=p.y; 
} 

mesh = new Polygon(rx, ry, mesh.npoints) 
+0

感謝您的回答,但您的代碼由於某種原因不起作用。網格碰撞就像多邊形沒有旋轉一樣工作。 – user1494136

+0

@ user1494136你在用什麼?這是對的嗎? –

+0

我使用java.awt.geom.AffineTransform中,然後我的衝突檢查是這樣的:對於 – user1494136