2016-09-01 3 views
1

私は赤と青のShapesが画面上を移動するゲームを作っています。私はどのように異なる色(紫色)に重複するようにするために高くて低く見えた。私はJava2Dのみを使用していますが、私の理解にはShadersをサポートしていません。私は赤の形を1つのBufferedImageに描画し、青の形を別のものに描画してから、AlphaCompositeを使用して色を結合して画面に描画しようとしましたが、正しい結果が得られませんでした。 255,0255は私の意見では紫色のためにひどいので、私は127,0,0と0,0,127を赤と青の代わりに255の代わりに使用しています。私は効果的にthisが好きです。重なり合った図形を新しい色にする方法は?

+0

'どこでも、彼らは別の色をオーバーラップ(紫)'手動で重複オプションを着色されています:ここでのコードセグメント(:私は描いてる形状が攻撃されているコンテキスト)がありますか?たとえば、それぞれの図形をそれぞれの色で描画し、交差点がある場合はそれを見つけ、別々に色付けします。 – copeg

+0

@copegはい、これは機能しました!ありがとう!私はこの質問を見つけた他の人のために今答えに取り組んでいきます。 – Ryguy9999

答えて

0

copegの提案のおかげで、私はそれを理解することができました。

//Attacks 
    BufferedImage attackImg = new BufferedImage(S_WIDTH, S_HEIGHT, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D ag = (Graphics2D) attackImg.getGraphics(); 
    //Make all of attackImg a transparent image 
    ag.setComposite(AlphaComposite.Clear); 
    ag.fillRect(0, 0, S_WIDTH, S_HEIGHT); 
    ag.setComposite(AlphaComposite.SrcOver); 

    //Render red attacks to attackImg 
    ag.setColor(new Color(127, 0, 0, 255)); 
    for(Shape s : redAttacks) 
     ag.fill(s); 

    //Render overlap areas using composites to attackImg 
    ag.setColor(new Color(127, 0, 127, 255)); 
    ag.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN)); 
    g.setColor(new Color(0, 0, 127, 255)); 
    for(Shape s : blueAttacks) 
    { 
     ag.fill(s); 
     g.fill(s); //Render blue attacks 
    } 
    //Render red and purple attacks 
    g.drawImage(attackImg, 0, 0, null); 
+0

また、[Area](https://docs.oracle.com/javase/7/docs/api/java/awt/geom/Area.html)クラスを使用して2つの図形を交差させることもできます(描画に使用できます)交差点は別の色) – copeg

関連する問題