총 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));
}
'g2d '는 어디에서 왔습니까? – MadProgrammer
'g2d'는 아마도 null 일 것입니다. 그렇지 않으면 안된다 ?? – Antoniossss
@MadProgrammer 개인 그래픽 offG; private Graphics2D g2d = (Graphics2D) offG; – Kokufuu