yüzden bir oyun yapıyorum ve ben üzerinde metin ekleyerek orijinal isabet işaretleyici görüntüsünü değiştirmeye çalışıyorum ve aşağıdaki kodu kullanıyorum:BufferedImage üreten Tamam siyah arka plan
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;
}
}
Özellikle yapıcı üzerinde odaklama: Ve şu an sahip olduğum hata BufferedImage'ı oluşturduğumda ve görüntüyü tamponlu görüntüde çizdiğimde, otomatik olarak siyah bir arka plan oluşturuyor ve nedenini bilmiyorum. Bu konuda araştırma yapmayı denedim ve bazıları AlphaComposite ve g.clearRect() yöntemiyle ilgili bir şeyleri değiştirmeyi söylüyor, ancak bunların hiçbiri işe yaramıyor. Bu arada, tamponlu görüntü üzerinde boyadığım görüntü 35x20 (tamponlu görüntünün boyutlarıdır) ve şeffaf bir arka plana sahiptir. Bu siyah arka planın nasıl kaldırılacağını bana söyleyebilirseniz, çok memnun olurum, teşekkürler.
Daha iyi yardım almak için bir [SSCCE] (http://sscce.org/), iki nedeni ---> en çok yanıt verenler 3. taraf bağlantılarına gitmiyor, 2) futures okuyucular için – mKorbel
sanıyordum? –
@JoshM Demek istediğim, kodu doğrudan buraya ya da yalnızca sorun kısmına ve tam kaynağın bir bağlantısına göndermek daha iyidir, bu yüzden eğer bağlantı öldüğünde, sorunuz gelecekte işe yaramaz hale gelmeyecektir. – Andrew