BufferedImage Herstellung schwarzer hintergrund

Okay also ich mache ein Spiel, und ich versuche, ändern Sie die original-hit-marker-Bild durch das hinzufügen von text auf Sie, und ich bin mit dem folgenden code:

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;
    }

}

Konzentriert sich insbesondere auf entweder Konstruktor:
Und die Fehler, die ich habe ist, dass wenn ich das BufferedImage und zeichne das Bild auf dem buffered image, es ist die Schaffung eines schwarzen hintergrund automatisch und ich weiß nicht, warum. Ich habe versucht, forscht zu diesem Thema und manche sagen, etwas zu ändern, über die AlphaComposite-und die g.clearRect() Methode, aber keiner von denen scheint zu funktionieren. Übrigens, das Bild, das ich Male, auf dem buffered image ist 35x20 (was die Abmessungen der buffered image) und es hat einen transparenten hintergrund. Wenn jemand mir sagen kann, wie Sie diesen schwarzen hintergrund wäre es sehr zu schätzen, danke.

  • für bessere Hilfe eher nach einem SSCCE, zwei Gründe, die ---> die meisten Beantworter dont gehen, auf der 3. Seite links, 2), die für futures-Leser
  • Ich dachte, ich war?
  • Er wollte sagen, es ist besser, poste den code hier direkt, oder nur den problem-Teil und ein link auf die vollständige Quelle, so dass, wenn der link tot geht, Ihre Frage nicht zu uselesss in die Zukunft.
  • Oh, ich sehe, ich bin sorry für alle Unannehmlichkeiten, die ich verursacht haben könnten. Das problem ist vor allem in entweder-Konstruktor (wo ich eigentlich erstellen des BufferedImage) und ich dachte, es wäre gut, die zeigen den ganzen code (in Anbetracht seiner < 100 Zeilen) für weitere Informationen. Aber ich denke, es wäre nur fein, um nur den Konstruktor.
  • rechts war es +1
InformationsquelleAutor Josh M | 2012-06-29
Schreibe einen Kommentar