2016-09-01 2 views
1

화면에 빨간색과 파란색 Shapes이 움직이는 게임을 만들고 있습니다. 나는 그들이 다른 색깔 (보라색)과 겹치는 곳을 하는 방법에 대해 높고 낮게 보았다. 나는 자바 2D만을 사용하고 있는데, 셰이더를 지원하지 않는다. 나는 하나의 BufferedImage에 빨간 도형을 그리고 다른 하나는 파란색으로 그려 넣은 다음, AlphaComposite을 사용하여 색상을 결합하고 화면에 그려 보았지만 올바른 결과를 얻지는 못했습니다. 내 생각에 255,0255가 보라색으로보기에 끔찍하기 때문에 255 대신 빨간색과 파란색으로 127,0,0과 0,0,127을 사용하고 있습니다. 나는 효과적으로 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

관련 문제