2016-02-27 224 views
0

我正在研究我的2D Java遊戲,並且碰撞邊界的旋轉有問題。旋轉的碰撞邊界

我有一個攻擊類:

public void render(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    AffineTransform old = g2d.getTransform(); 
    g2d.rotate(Math.toRadians(player.getDir()), (double) player.getX() + 16, (double) player.getY() + 16); 
    g2d.setComposite(makeTransparent(alpha)); 
    g.setColor(Color.gray); 
    g.fillRect((int) x, (int) y, 32, 32); 
    g2d.setComposite(makeTransparent(1)); 
    g.setColor(Color.red); // drawing the results 
    g2d.draw(getBounds()); // drawing the getBounds(); 
    g2d.setTransform(old); 

} 

private AlphaComposite makeTransparent(float alpha) { 
    int type = AlphaComposite.SRC_OVER; 
    return (AlphaComposite.getInstance(type, alpha)); 
} 

public Rectangle getBounds() { 

    return new Rectangle((int) x, (int) y, (int) width + 32, (int) height + 32); 
} 

Sample of result

但實際上它只是「造成傷害」的字符的右側 - 般不會發生旋轉。我試圖使用: https://stackoverflow.com/a/5925715/5502471 解決方案,但我有點失敗,不知道我做錯了什麼。

一些提示:

  • 攻擊是一個獨立的類,

  • 攻擊從Player類通過鍵盤輸入引起的,

  • 碰撞發生在敵對階級,

    if (tempObject.getId() == ID.Attack){ 
        if (getBounds().intersects(tempObject.getBounds())){ 
         health-=3; 
        } 
    } 
    

我一直在尋找一些「簡單」的方法來做到這一點,因爲我希望在許多事情中使用它);如果沒有簡單的方法,那麼困難的方式也會做 - 挑戰接受!

回答

0

我發現了一個非常簡單的解決方案(某處位於stackoverlow.com; P)。這並不完美,但是,至少它起作用;)。只是使用一種方法來移動繪製矩形邊界的起點。

public Rectangle getBounds() { 

     double newX = 0; 
     double newY = 0; 
     Rectangle attack = new Rectangle((int) newX, (int) newY, 32, 32); 

     double[] pt = { x, y }; 
     AffineTransform 
       .getRotateInstance(Math.toRadians(player.getDir()), (double) player.getX(), (double) player.getY()) 
       .transform(pt, 0, pt, 0, 1); 
//playeer.getDir() - method to return the rotation angle in degress 
     newX = pt[0]; 
     newY = pt[1]; 

     attack = new Rectangle((int) newX, (int) newY, 32, 32); 

     return attack; 
    } 

Results

我希望你發現它有用。乾杯!