2014-09-17 4 views
0

총 6.5 초의 이미지를 표시하고 마지막 1.5 초 동안 페이드 아웃하고 싶습니다. Java 2d/AWT에서 페이드 아웃 효과

g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency)); 

나는 몇 가지를 읽고, 나는 gameLogo이 BufferedImage의, 단순한 이미지 수 없습니다 때문입니다 생각 : 나는 라인에서 NPE를 얻고있다. paint.net을 사용하여 만들었으므로 기본적으로 알파 채널이 있어야합니다. 나는 BufferedImage를 만드는 것에 대한 몇 가지 포럼을 조사했지만 여전히 혼란 스럽다.

마지막 1.5 초를 추가하기 위해 추가 라인을 추가하기 전에 아래 코드 스 니펫이 완벽하게 작동했습니다.

미리 도움을 주셔서 감사합니다.

편집 :

고정하지만 여전히 완전히 페이드 아웃하지 않는 경우 (Graphics2D를) NPE 캐스트를 추가로

...

내가 ( offG.dispose를 사용해야); 어딘가에 있습니까?

offG.setColor(Color.BLACK); 
offG.fillRect(0, 0, 800, 480); 
counter += deltaTime; 
// start fade out after 4 seconds 
if (counter < 4000) 
    offG.drawImage(devLogo, 0, 0, this); 
else { 
    transparency = (float)(1 - (counter - 4000)/50 * 0.02); 
    if (transparency < 0) 
    transparency = 0; 
    ((Graphics2D) offG).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency)); 
    offG.drawImage(devLogo, 0, 0, this); 
} 
// wait 6,5 seconds 
if (counter > 6500) { 
    gameState = 2; 
    counter = 0; 
    transparency = 1; 
    ((Graphics2D) offG).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency)); 
} 
+1

'g2d '는 어디에서 왔습니까? – MadProgrammer

+0

'g2d'는 아마도 null 일 것입니다. 그렇지 않으면 안된다 ?? – Antoniossss

+0

@MadProgrammer 개인 그래픽 offG; private Graphics2D g2d = (Graphics2D) offG; – Kokufuu

답변

0

더 많은 코드를 제공해야합니다. 당신의 경우 g2dnull입니다. 귀하의 의견에 따르면 필드에 Graphics 개체를 들고 있습니다. Graphics 객체가 AWT에 의해 드로잉 메서드에 전달되고 사용자 필드에 할당하는 것이지만 g2d 필드에도 새 값을 할당하는 것을 잊었습니다. 두 개의 다른 입력 된 필드에 단일 개체를 유지할 필요가 없다고 생각합니다. 내가 너라면 나는 Graphics2d 유형의 개체에서만 작동 할 것이다. 그러면 코드 작성시 혼란 스러울 것입니다. 동일한 Graphics 개체를 2 개의 별도 항목으로 처리하지만 동일한 개체를 참조하는 입력란입니다. 왜? 그럴 필요 없어.

NPE이 맞습니까?

+0

고맙습니다. 지금은 이해합니다. – Kokufuu