2012-03-13 15 views
1

ここに私の問題です - 私は単一のイメージの円形部分を描画しようとしています。イメージの一部を描画する(Java)

私はトップダウンのダンジョンクローラーのゲームでいくつかの作業をしています。私はプレーヤーの周りに明るい半径を作ろうとしています。床は単一の画像であり、私はそれの小さな円形の部分だけを描く必要があります。私はこの方法を見てきました:

drawImage(Image img, 
      int dx1, 
      int dy1, 
      int dx2, 
      int dy2, 
      int sx1, 
      int sy1, 
      int sx2, 
      int sy2, 
      Color bgcolor, 
      ImageObserver observer) 

しかし、それは四角いサブセクションだけを描くようです。 サークルの錯覚を与えるために小さな正方形のトンを描くよりも簡単な方法を知っている人はいますか?そして、その中央に透明穴と黒画像

おかげ

+1

真ん中に透明部分がある黒い画像を重ね合わせるだけではどうですか? http://i.imgur.com/eOmFF.png – jonmorgan

+0

このような画像を生成する方法については、私の答えをチェックしてください。 –

答えて

1

GraphicssetClip()メソッドでこれを行うことができます。

は、これは、いくつかの他の作業が必要ですが、:

import java.awt.Graphics; 
import java.awt.geom.QuadCurve2D; 
//... 

    g.setClip(new QuadCurve()); // Set the bounding curve for the image. 
    g.drawImage(...); 

私が言ったように、それはQuadCurve2Dオブジェクトが異なって定義する必要があります意味、より多くの作業が必要ですが、あなたはそのためのcheck the docすることができます。

+0

これを調べます。本当にありがとう。 QuadCurveではなくEllipse2Dを代用できると思いますか? –

+0

私は確信していません、私はそれほど多くを実際には見ていませんでした。 'Ellipse2D'が' Shape'を実装していれば動作します。 – Jon

+0

申し訳ありませんが、私はそれを1時間か2時間かけて遊びに行きます。ありがとう! –

0

は、これは素晴らしい解決策ではないですが、フロア全体を描いたらどう?

+0

私はそれについて考えていましたが、可能ならば別の方法を探したいと思います。それに、私がPhotoshopでそのイメージを作っていない限り、それはまだ私に円形の穴の問題を残す。私はJavaでそれをやりたがっています。 –

1

軽い半径の最も美しい効果は、アルファチャンネルに勾配を持つオーバーレイを使用することです。それはおそらくエラーの完全なですので、私はこれをコンパイルしていなかった

// do this once during setup 
overlay = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGBA); 
for (int x = 0; x < width; ++x) 
{ 
    for (int y = 0; y < height; ++y) 
    { 
     double range = 100; 
     double distance = Math.sqrt(Math.pow(x - width/2, 2) + Math.pow(y - height/2, 2)); 
     int value = Math.max(100, (int)Math.round(255 - 100 * distance/range)); 
     overlay.setRGB(x, y, new Color(0, 0, 0, value)); 
    } 
} 
.... 
// do this every frame 
gfx.drawImage(overlay, 0, 0, null); 

:このような

何か!

いくつかのマップを生成し、アルファ値にノイズを追加することができます。あるいは、暖かい光を得るように色を調整してください。

関連する問題