Skip to content

Text (einzeiliger Text)

Die Klasse Text ist im Paket pi.actor enthalten und kann über die Anweisung import pi.actor.Text; importiert werden.

Klassenkarte

Das Klassenkarte der Figur Text mit dem Konstruktor und allen Settern.

Tutorial „Hello World“1

Schritt 1: Grundlegender Aufbau

Das grundlegendste Hello World sieht so aus:

Das (noch wenig spannende) Ergebnis des Codes

import pi.Controller;
import pi.Scene;
import pi.Text;

public class HelloWorldVersion1 extends Scene
{
    public HelloWorldVersion1()
    {
        Text helloWorld = new Text("Hello, World!");
        helloWorld.height(2);
        helloWorld.color("white");
        helloWorld.center(0, 1);
        add(helloWorld);
        Controller.debug();
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new HelloWorldVersion1(), 400, 300);
    }
}
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/main_classes/actor/hello_world/HelloWorldVersion1.java

Szene

Die HelloWorldVersion1-Klasse leitet sich aus der Klasse Scene der Engine ab. Szenen in der Engine sind eigenständige Spielbereiche. Jede Szene hat ihre eigenen grafischen (und sonstige) Objekte; Szenes werden unabhängig voneinander berechnet. Ein Spiel besteht aus einer oder mehreren Szenen und wir erstellen eine Szene, in der „Hello World“ dargestellt werden soll:

public class HelloWorldVersion1 extends Scene

Text

Wir wollen den Text „Hello, World!“ darstellen. Die Klasse Text ist dafür zuständig. Ein Text mit Inhalt „Hello, World!“ und Höhe 2 wird erstellt:

        Text helloWorld = new Text("Hello, World!");

Der Text wird an Position (0|1) zentriert:

        helloWorld.center(0, 1);

Der Text wird an der Szene angemeldet:

        add(helloWorld);

Der letzte Schritt ist nötig, damit das Objekt auch sichtbar wird. In jeder Szene werden nur die Objekte gerendert, die auch an der Szene angemeldet sind.

Debug-Modus

Der Debug-Modus zeigt das Koordinatensystem und weitere hilfreiche Informationen.

Um Überblick zu behalten und die Grafikebene zu verstehen, ist der Debug-Modus der Engine hilfreich. Diese Zeile aktiviert den Debug Modus:

 *

Die Klasse Controller enthält neben Debug-Modus weitere Features, die die Spielumgebung global betreffen.

Da wir die Figuren „per Hand“, d.h. mithilfe der Methode add() zur Szene hinzugefügt haben, muss der Instant-Modus deaktiviert werden.

    {

Die Klasse Controller kontrolliert auch den Spielstart. Dazu muss lediglich die (zuerst) darzustellende Szene angegeben werden, sowie die Fenstermaße (in diesem Fall 400 Pixel Breite und 300 Pixel Höhe):

        Controller.instantMode(false);

Schritt 2: Geometrie und Farbe

Beim nächste Codebeispiel handelt es sich um eine Erweiterung der Version 1 um geometrischen Figuren und Farbe.

Jetzt mit mehr Farbe und geometrischen Figuren

import pi.Controller;
import pi.Scene;
import pi.Circle;
import pi.Rectangle;
import pi.Text;

public class HelloWorldVersion2 extends Scene
{
    public HelloWorldVersion2()
    {
        Text helloworld = new Text("Hello, World!");
        helloworld.height(2);
        helloworld.center(0, 1);
        add(helloworld);
        helloworld.color("black");
        // Ein grünes Rechteck als Hintergrund
        Rectangle background = new Rectangle(12, 3);
        background.color("green");
        background.center(0, 1);
        background.layerPosition(-1);
        // Ein blauer Kreis
        Circle circle = new Circle(8);
        circle.color("blue");
        circle.center(0, 1);
        circle.layerPosition(-2);
        add(background, circle);
        camera().meter(20);
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new HelloWorldVersion2(), 400, 300);
    }
}
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/main_classes/actor/hello_world/HelloWorldVersion2.java

Geometrische Figuren

Die Engine unterstützt diverse geometrische Figuren. Dazu gehören Rechtecke und Kreise. Der Code erstellt ein Rechteck mit Breite 12 und Höhe 3 sowie einen Kreis mit Durchmesser 8.

Rectangle background = new Rectangle(12, 3);
Circle circle = new Circle(8);

Farbe

Einige Objekte in der Engine können beliebig gefärbt werden. Text und geometrische Figuren gehören dazu. Mit setColor(Color) kann die Farbe als AWT-Color-Objekt übergeben werden oder einfacher als Zeichenkette:

background.color("green");
circle.color("blue");

Ebenen-Position

So würde das Bild aussehen, wenn die Ebenen-Position nicht explizit gesetzt werden würde.

Wir wollen explizit, dass der Text vor allen anderen Objekten dargestellt wird. Außerdem soll der Kreis noch hinter dem Rechteck sein. Um das sicherzustellen, kann die Ebenen-Position explizit angegeben werden: Je höher die Ebenen-Position, desto weiter im Vordergrund ist das Objekt.

background.layerPosition(-1);
circle.layerPosition(-2);

Setter

Folgendes Codebeispiel verwendet alle Setter der Figur Text:

        add(new Text("Alter Inhalt").font("Arial")
            .style(1)
            .content("Alle Attribute")
            .width(15.5)
            .height(3.2)
            .color("green")
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/main_classes/actor/text/TextAllSettersDemo.java

Schriftstil

Der Stil der Schriftart (fett, kursiv oder fett und kursiv) kann entweder als Ganzzahl oder als Aufzählungstyp (enum) angegeben werden. Die Methode style(int) akzeptiert Ganzzahlen als Eingabeparameter und die überladene Methode style(pi.resources.font.FontStyle) den Aufzählungstyp FontStyle. Folgende Aufzählung stellt dar, welche Ganzzahl welchem Aufzählungstyp entspricht:

        // Mithilfe des Aufzählungstyps FontStyle
        plain.style(FontStyle.PLAIN);
        bold.style(FontStyle.BOLD);
        italic.style(FontStyle.ITALIC);
        boldItalic.style(FontStyle.BOLD_ITALIC);

        // Oder als Ganzzahl
        plain.style(0);
        bold.style(1);
        italic.style(2);
        boldItalic.style(3);
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/main_classes/actor/text/TextStyleDemo.java

Text in der Physik-Simulation

Wie alle anderen Figuren kann auch die Text-Figur in einer Physik-Simulation verwendet werden. Das folgende Beispiel lässt den Beispieltext auf einer Ebene abprallen. Damit der Text aus dem Spielfenster fliegt, wird seine Fallrichtung mit einem nach links gerichteten Impuls (applyImpulse(new Vector(-100, 0))) beeinflusst.

    public TextPhysicsDemo()
    {
        backgroundColor("blue");
        gravityOfEarth();

        add(new Text("Text").font(new Font(Font.SERIF, 1, 10))
            .height(6)
            .density(1)
            .restitution(0.95)
            .center(9, 7)
            .rotateBy(60)
            .makeDynamic()
            .applyImpulse(new Vector(-100, 0)));

        add(new Rectangle(15, 1).center(0, -7).makeStatic());
    }
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/main_classes/actor/text/TextPhysicsDemo.java


  1. Der Abschnitt stammt aus dem Engine-Alpha-Wiki: https://engine-alpha.org/wiki/v4.x/Hello_World