Ursprungsmitteilung
Thema Sprechblase in JCardGame 
Autor Stefan Töngi 
Eingangsdatum 2016-01-10 18:18:55.0 
Mitteilung Hallo,

ich verwende die JCardGame Lib für diverse Kartenspiele.
Nun wollte ich gerne eine Sprechblase als Actor einbauen, wo man den Text in einer Sprechblase darstellen und dann auch wieder komplett entfernen kann.
Die Sprechblase bekomme ich ja ganz leicht hin, aber wie schreibe ich den Text in die Blase rein ?
public class BubbleActor extends Actor
{
public static final int UNTENLINKS = 0;
public static final int OBENRECHTS = 1;
private static Font bubbleFont = new Font("Arial", Font.BOLD, 13);;
private int w, h;

public BubbleActor()
{
super(false, "sprites/bubble.png", 2); // Sprechblasenbilder
hide();
}

public void show(String text, int richtung)
{
String[] tx = text.split(" ");
show(richtung);
BufferedImage bi = getCurrentImage();
Graphics2D g = bi.createGraphics();
g.setBackground(Color.BLACK);
FontMetrics fm = g.getFontMetrics();
g.setColor(Color.BLACK);
g.setFont(bubbleFont);
int x, y;
if (richtung == UNTENLINKS)
{
x = 78;
y = 56;
}
else
{
x=70;
y=66;
}
for (int i = 0; i < tx.length; i++)
{
Rectangle2D bound = fm.getStringBounds(tx[i], g);
w = (int) bound.getWidth() / 2;
h = (int) bound.getHeight();
g.drawString(tx[i], x - w, y- (h * tx.length) / 2 + i * h);
}
}
}


Das funktioniert soweit, aber der Buffer wird nicht mehr gelöscht und die Texte bleiben stehen, so dass bei kürzeren Texten vorherige, längere Texte noch zu sehen sind, obwohl neue Instanzen des Actors erzeugt wurden... 
 
      
Antworten
Thema Sprechblasen 
Autor Aegidius Plüss 
Eingangsdatum 2016-01-11 09:30:52.0 
Mitteilung Guten Tag, Danke für die Anfrage. Ich glaube, dass es besser wäre, einen dynamischen Aktor zu erstellen, der sowohl das Bild der Sprechblase und den Text darin enthält. Eine Anleitung dazu gibt es auf

http://www.aplu.ch/home/apluhomex.jsp?site=74


Falls das nicht funktioniert, so melden Sie sich wieder und ich versuche dann, ein Beispiel zu machen.

MfG. 
 
Thema GELÖST: Sprechblase 
Autor Stefan Töngi 
Eingangsdatum 2016-01-15 16:20:13.0 
Mitteilung Hallo, danke für den Tip! Habe es hinbekommen.
Hier meine Lösung:
public class BubbleActor extends Actor
{
public static enum Ausrichtung
{
UNTENLINKS, OBENRECHTS
};

private static Font bubbleFont = new Font("Arial", Font.BOLD, 13);;

public BubbleActor(String text, Ausrichtung richtung)
{
super(true, createActor(text, richtung));
// super(false, "sprites/bubble.gif", 2);
}

private static BufferedImage createActor(String text, Ausrichtung richtung)
{
GGBitmap bm = new GGBitmap(158, 100);
BufferedImage bi = GGBitmap.getImage("sprites/bubble_" + richtung.ordinal() + ".gif");
bm.drawImage(bi);
Graphics2D g = bi.createGraphics();
String[] tx = text.split(" ");
FontMetrics fm = g.getFontMetrics();
bm.setPaintColor(Color.BLACK);
bm.setFont(bubbleFont);
int x, y;
if (richtung == Ausrichtung.UNTENLINKS)
{
x = 70;
y = 56;
} else
{
x = 70;
y = 66;
}
for (int i = 0; i < tx.length; i++)
{
Rectangle2D bound = fm.getStringBounds(tx[i], g);
int w = (int) bound.getWidth() / 2;
int h = (int) bound.getHeight();
bm.drawText(tx[i], new Point(x - w, y - (h * tx.length) / 2 + i * h));
}

return bm.getBufferedImage();
}
 
Thema Sprechblase 
Autor Aegidius Pluess 
Eingangsdatum 2016-01-15 19:28:41.0 
Mitteilung Vielen Dank für die Publikation der Lösung. Bitte beachten Sie, dass Sie immer die neuste Version der JGameGrid-Library verwenden, da es immer wieder Bug-Fixes gibt.

MfG