Я хотел бы отобразить изображение для 6.5s в целом и исчезнуть в последние 1,5 секунды. Я получаю NPE в строке:Эффект затухания в Java 2d/AWT
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency));
Я прочитал некоторые, и я думаю, что это потому, что gameLogo не BufferedImage, только простое изображение. Я сделал это с paint.net, поэтому он должен иметь альфа-канал по умолчанию. Я искал некоторые форумы о создании BufferedImage, но все еще смущен.
Фрагмент кода ниже работал отлично, прежде чем я добавил дополнительные строки, чтобы пробить последние 1,5 секунды.
Благодарим за помощь!
EDIT:
с добавлением бросание (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. Должно быть, это не 'offG' ?? – Antoniossss
@MadProgrammer частная графика offG; private Graphics2D g2d = (Graphics2D) offG; – Kokufuu