Ursprungsmitteilung
Thema GameGrid - Textanzeigen 
Autor Pulper 
Eingangsdatum 2017-11-30 06:44:23.0 
Mitteilung Ich möchte ein kleines RPG-Spiel im Stile von DSA programmieren. Benötige also diverse Anzeigen (zB für Leben, Mana, Charaktereigenschaften, ...) für meinen Charakter und die Gegner.
Für meine Lebensanzeiger würde ich zB. gerne ein Herz verwenden in welches ich das aktuelle Leben hineinschreibe.

Auf java-online.ch hab ich in den Beispielspielen keine Anzeigen entdeckt. In der Doku bin ich fündig geworden und habe ich Klasse TextActor ausgegraben. Sie scheint aber eher für "einmalige" Texte gedacht zu sein, welche man nicht verändern mag.
Kann man mein Anzeigenproblem trotzdem mit TextActor realisieren? Ich habe in der Doku keine Methode gefunden, mit der ich direkt die einzelnen Parameter (Text, Textfarbe, ...) manipulieren kann.
Nach jedem Treffer das derzeitige TextActorObjekt löchen und ein neues, aktualisiertes TextActorObjekt erstellen, scheint mir zu schwerfällig und nicht im Sinne des Erfinders.

Hat mir jemand einen Tipp, wie ich das einfach und schön realisieren könnte?

Danke schonmal für eure Antworten :-) 
 
      
Antworten
Thema GameGrid - Text 
Autor Aegidius Plüss 
Eingangsdatum 2017-12-01 08:02:38.0 
Mitteilung Danke für die Forumanfrage. Ihr Problem kann man auf verschieden Arten anpacken: Falls Sie eine beschränke Anzahl Texte haben, die zu den Aktoren gehören, könnten Sie verschiedene Aktorbilder (Sprites) mit dem entsprechenden Text machen, alle Sprites demselben Actor zuordnen und dann das Sprite je nach Text umschalten.

Falls Sie ganz dynamischen Text wollen (also z.B. eine sich dynamisch ändernde Zahl), so sind TextActors tatsächlich gut geeignet und man kann den Text auch formatieren und positionieren. Es folgen zwei Beispiele dazu.

MfG

// GameGridEx38.java
// TextActor, background black/transparent

import ch.aplu.jgamegrid.*;
import java.awt.*;

public class GameGridEx38 extends GameGrid
{
public GameGridEx38()
{
super(11, 11, 60, java.awt.Color.red, false);
TextActor ta = new TextActor(true, "Bonsoir",
Color.white, new Color(0, 0, 0, 0), new Font("SansSerif", Font.BOLD, 64));
addActor(ta, new Location(5, 5));
show();
double dir = 0;
while (true)
{
ta.setDirection(dir);
refresh();
delay(100);
dir += 6;
}
}

public static void main(String[] args)
{
new GameGridEx38();
}
}




// GameGridEx38a.java
// TextActor, adjust

import ch.aplu.jgamegrid.*;
import java.awt.*;

public class GameGridEx38a extends GameGrid
{
public GameGridEx38a()
{
super(11, 11, 60, java.awt.Color.red, false);
TextActor ta = new TextActor(true, "Bonsoir",
Color.white, new Color(255, 255, 255, 0), new Font("SansSerif", Font.BOLD, 64));
addActor(ta, new Location(5, 5));
int width = ta.getTextWidth();
int height = ta.getTextHeight();
System.out.println("width: " + width);
System.out.println("height: " + height);
ta.setLocationOffset(new Point(-width / 2, 0));
show();
doRun();
}

public static void main(String[] args)
{
new GameGridEx38a();
}
}



 
 
Thema GameGrid - Textanzeigen  
Autor Pulper 
Eingangsdatum 2017-12-02 15:14:02.0 
Mitteilung Dankeschön für die QuellCodes - werde mich gleich mal ans Testen machen :-) 
 
Thema GameGrid - Textanzeigen  
Autor Pulper 
Eingangsdatum 2017-12-04 12:42:04.0 
Mitteilung Ich bräuchte nun doch nochmal einen kleinen Denkanstoß / Hilfe bezüglich der dynamischen Texte mittels TextActors. Ich habe einfach erstmal versucht mit Ihrem Beispiel ein wenig weiterzuspielen :-)

Wenn ich bei Ihrem 1. Beispiel in der while-Schleife statt des "Bonsoir" den aktuellen Wert der Variablen "dir" im TextActor ausgeben will, wird trotzdem weiterhin immer nur "Bonsoir" angezeigt :-(

Mein Walk-Around sieht wie folgt aus (aber da stört mich das permanente erzeugen / entfernen des Objektes):



while (true)
{
TextActor ta = new TextActor(true, new Double(dir).toString(),
Color.white, new Color(0, 0, 0, 0), new Font("SansSerif", Font.BOLD, 64));
addActor(ta, new Location(5, 5));

ta.setDirection(dir);
refresh();
delay(100);
dir += 6;

ta.removeSelf();
}


Vorweihnachtliche Grüße :-)
 
 
Thema TextActor 
Autor Aegidius Plüss 
Eingangsdatum 2017-12-04 22:19:31.0 
Mitteilung Dafür ist ja die OOP da, dass man im geeigneten Moment neue Instanzen macht...

Hier mein Vorschlag:


// GameGridEx38b.java
// Dynamically changing text

import ch.aplu.jgamegrid.*;
import java.awt.*;

public class GameGridEx38b extends GameGrid
{
public GameGridEx38b()
{
super(11, 11, 60, Color.red, false);
show();
double dir = 0;
TextActor ta;
while (true)
{
ta = new TextActor(true, new Double(dir).toString(),
Color.green, new Color(0, 0, 0, 0), new Font("SansSerif", Font.BOLD, 64));
// background color is transparent
addActor(ta, new Location(5, 5), dir);
delay(100);
dir += 6;
ta.removeSelf();
}
}

public static void main(String[] args)
{
new GameGridEx38b();
}
}


Beachten Sie, dass beim addActor() auch immer automatisch ein refresh() gemacht wird, sonst muss man addActorNoRefresh() verwenden und dann im geeigneten Moment "von Hand" ein refresh() aufrufen.

Auch Ihnen schöne Adventszeit.
 
 
Thema GameGrid - Textanzeigen  
Autor Pulper 
Eingangsdatum 2017-12-06 08:24:43.0 
Mitteilung Manchmal sieht man den Wald voro lauter Bäumen nicht :D

Danke vorallem auch für die super schnellen Reaktionszeiten auf Fragen!! Da hat Nikolausi heute bestimmt den Schuh bis ganz oben voll gefüllt mit tollen Sachen ;)