2009-06-10 7 views
3

私は現在、Java2Dのタイルベースのゲームに取り組んでいます。安価なアイキャンディを追加しようと考えていました。ローリンググラフィックスプログラミングの果物?

たとえば、爆発および/または煙のために単純なパーティクルシステム(thisのようなもの)を実装します。

新しいアートを大量に(または全く)描画する必要のない比較的簡単な効果を提案することはありますか?

上記の影響についてのチュートリアルとコードサンプルもまた大歓迎です!

-Ido。

PS - 絶対に必要な場合は、LWJGL/JOGLやSlickのようなものに切り替えることができますが、Java2Dにとどまっています。

答えて

6

ぼかしやその他の画像フィルタリングの効果を実現するのはかなり簡単です。

例えば、BufferedImageにぼかしを実行するために、1はKernelに指定されたコンボリューション行列でConvolveOpを使用することができます:ぼかし効果が必要な場合には非常にわからない

BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, 
    new float[] { 
     1/9f, 1/9f, 1/9f, 
     1/9f, 1/9f, 1/9f, 
     1/9f, 1/9f, 1/9f 
    } 
)); 

BufferedImage resultImg = op.filter(originalImg, resultImage); 

、それが来るかもしれませんいくつかの時間に便利です。しかし、私はそれが実装の容易さのために低いぶら下がりの果物だと言うでしょう。

ここにいくつかの情報がconvolution matricesです。シャープ、エンボス、エッジエンハンスなどのエフェクトを実装するのにも使用できます。

+0

モーションブラーは、2Dでとても素敵に見えるようにすることができ、非常に簡単に実現できます。 – shoosh

+0

ありがとう、私はそれを使用します! あなたが知っているような効果はこれ以上ありませんか? –

5

ピクセル化エフェクトを実行することは、BufferedImageで低掛けの果物操作です。

これは、2つのステップで行うことができる。

  1. は、ピクセル化の一つのブロックの色を決定します。
  2. イメージのピクセル化ブロックを入力します。

ステップ1:色を決定する:determineColor方法において

public static Color determineColor(BufferedImage img, int x, int y, int w, int h) { 
    int cx = x + (int)(w/2); 
    int cy = y + (int)(h/2); 
    return new Color(img.getRGB(cx, cy), true); 
} 

BufferedImageの中心から画素の色が決定され、呼び出し元に戻されます。

ステップ2:決定された色を有するピクセル化ブロックに記入:

BufferedImage sourceImg = ...; // Source Image. 
BufferedImage destimg = ...; // Destination Image. 
Graphics g = destImg.createGraphics(); 

int blockSize = 8; 
for (int i = 0; i < sourceImg.getWidth(); i += blockSize) { 
    for (int j = 0; j < sourceImg.getHeight(); j += blockSize) { 
     Color c = determineColor(sourceImg, i, j, blockSize, blockSize); 
     g.setColor(c); 
     g.fillRect(i, j, blockSize, blockSize); 
    } 
} 
g.dispose(); 

コードのかなりがあるが、この効果は、知的低ぶら下げ果実である - はるかに複雑なことがありません続行中です。基本的にブロックの中央の色を見つけ、その色でボックスを塗りつぶしています。これはかなり単純な実装なので、より良い方法があるかもしれません。

次は前で、上記ピクセレーション効果を実行する比較後:(例えば煙用)

Non-pixelated image http://coobird.net/img/grad64.pngPixelated image http://coobird.net/img/grad64p.png

0

透明効果はそれほど苦労せずに大きな違いを生むことができます。しかし、Java2dでこれができるかどうかは考えられません。

1

Filthy Rich Clientsは、非常に優れたJava2D/Swingエフェクトを数多く紹介しています。また、これらの効果に対する優れた理論的背景も示しています。どれくらいの甘い果実があるのか​​よく分かりませんが、ブラウジングには素晴らしいリソースです。

アルファ合成で何かをする可能性があります。多分アルファコンポジットをTiming Frameworkと組み合わせてください。ゲームのルールに応じて、選択的かつ時間依存的にオブジェクトを半透明にすることは、ゲームプレイにとって重要なことさえあります。

0

他のものから跳ね返り、転がり落ちるようなものはどれも涼しいかもしれません。ゲームがトップダウン2Dではなくサイドスクロール2Dであれば、 Box2Dのような準備が整った物理エンジンは、ほとんど何の努力もなくクールな何かをする。ここにはa Java port of Box2Dがあります。

+0

私は以前のようなもののためにPhys2Dを使いました。 悲しいことに、トップダウンゲームです。 –

+0

ああ、それは言及する価値があった。その場合、私は間違いなくパーティクルルートに行きます。しかし、ゲームが終わった後は、プレイ可能になるのに十分なだけの時間がかかります。人の手でプレイすることは常に最優先事項です。 –

関連する問題