Хорошо, так что я сделать игру, и я пытаюсь изменить оригинальный хит изображение маркера, добавляя текст на нем, и я использую следующий код:BufferedImage производства черный фон
import javax.swing.ImageIcon;
import javax.swing.Timer;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
public class HitMarker {
public static final Image rangeHitMarker = new ImageIcon(HitMarker.class.getResource("rangeHitMarker.png")).getImage();
public static final Image magicHitMarker = new ImageIcon(HitMarker.class.getResource("magicHitMarker.png")).getImage();
public static final Image monsterHitMarker = new ImageIcon(HitMarker.class.getResource("monsterHitMarker.png")).getImage();
public static final Font font = new Font("Tahoma", Font.PLAIN, 10);
public static final Color t = new Color(0,0,0,0);
public Image hitMarker;
public BufferedImage image;
public String hit;
public int attackStyle;
public boolean rangeAttack;
public int x;
public int y;
public Timer timer;
public boolean remove;
public HitMarker(int x, int y, int hit, int attackStyle){
this.hit = String.format("%d", hit);
this.remove = false;
this.x = x;
this.y = y;
this.attackStyle = attackStyle;
this.hitMarker = getImage();
BufferedImage bi = new BufferedImage(35, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.drawImage(hitMarker, 0, 0, null);
g.setFont(font);
g.setColor(Color.WHITE);
g.drawString(this.hit, 18, 13);
g.dispose();
image = bi;
timer = new Timer(800,
new ActionListener(){
public void actionPerformed(ActionEvent e){
remove = true;
timer.stop();
}
}
);
timer.setInitialDelay(800);
timer.start();
}
public HitMarker(int x, int y, int hit){
this.hit = String.format("%d", hit);
this.remove = false;
this.x = x;
this.y = y;
this.hitMarker = monsterHitMarker;
BufferedImage bi = new BufferedImage(35, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.drawImage(hitMarker, 0, 0, null);
g.setFont(font);
g.setColor(Color.WHITE);
g.drawString(this.hit, 18, 13);
g.dispose();
image = bi;
timer = new Timer(800,
new ActionListener(){
public void actionPerformed(ActionEvent e){
remove = true;
timer.stop();
}
}
);
timer.setInitialDelay(800);
timer.start();
}
public boolean isRangeAttack(){
return attackStyle == AttackStyleConstants.RANGE || attackStyle == AttackStyleConstants.RANGE_DEFENCE ? true : false;
}
public Image getImage(){
return isRangeAttack() ? rangeHitMarker : magicHitMarker;
}
}
Особое внимание уделяется либо конструктору: И ошибка, которую я испытываю, заключается в том, что когда я создаю BufferedImage и рисую изображение на буферизованное изображение, он автоматически создает черный фон, и я не знаю почему. Я пробовал исследовать эту тему, а некоторые говорят, что нужно что-то изменить в отношении метода AlphaComposite и g.clearRect(), но ни один из них не работает. Кстати, изображение, которое я рисую на буферизованном изображении, составляет 35x20 (это размеры буферизованного изображения) и имеет прозрачный фон. Если кто-нибудь скажет мне, как удалить этот черный фон, это было бы очень признательно, спасибо.
для лучшей помощи скорее отправить сообщение [SSCCE] (http://sscce.org/), две причины ---> большинство ответчиков не идут на ссылки третьей стороны, 2) для читателей фьючерсов – mKorbel
Я думал, что был? –
@JoshM Он хотел сказать, что лучше разместить код прямо здесь или просто часть проблемы и ссылку на полный источник, поэтому, если ссылка не работает, ваш вопрос не станет бесполезным в будущем. – Andrew