Skip to content

ImageText (Bilderschriftart)

Ebenso wie die Figur Text ist die Figur ImageText zur Darstellungen von Texten gedacht. ImageText verwendet jedoch keine vektorbasierte Schriftart zur Darstellung, sondern jedes Zeichen ist durch eine Pixelgrafik repräsentiert. Diese Pixelgrafik-Bilddateien müssen in einem gemeinsamen Ordner liegen. Hier bietet sich das Dateiformat png an.

Bevor ImageText verwendet werden kann, muss zuerst eine Bilderschriftart definiert werden.

Import

Die Klasse ImageText ist im Paket pi.actor enthalten und kann über die Anweisung

import pi.actor.ImageText;

importiert werden.

multiline (mehrzeilig)

{
    public MultilineDemo()
    {
        ImageText.Font font = new ImageText.Font(
                "main-classes/actor/image-text/tetris")
                    .supportsCase(CaseSensitivity.UPPER);
        ImageText textField = new ImageText(font)
            .content(
                """
                        Das ist ein laengerer Text, der in mehrere Zeilen unterteilt ist. Zeilenumbrueche
                        koennen auch
                        erzwungen werden.""")
            .hAlign(HAlign.LEFT)
            .lineWidth(20)
            .pixelMultiplication(4);
        // Um die toString-Methode zu testen
        add(textField.debug());
        backgroundColor("white");
        focus(textField);
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new MultilineDemo());
    }
}
Zum Java-Code: demos//home/runner/work/engine-pi/engine-pi/subprojects/demos/src/main/java/demos/classes/actor/image_text/MultilineDemo.java

TextAlignment (Textausrichtung)

{
    ImageText.Font font = new ImageText.Font(
            "main-classes/actor/image-text/tetris")
                .supportsCase(CaseSensitivity.UPPER);

    public AlignmentDemo()
    {
        camera().meter(32);
        backgroundColor("blue");
        createText(3, "Dieser Text ist linksbuendig ausgerichtet.", LEFT);
        createText(-2, "Dieser Text ist zentriert ausgerichtet.", CENTER);
        createText(-7, "Dieser Text ist rechtsbuendig ausgerichtet.", RIGHT);
    }

    private void createText(int y, String content, HAlign alignment)
    {
        ImageText line = new ImageText(font).content(content)
            .lineWidth(18)
            .hAlign(alignment)
            .pixelMultiplication(4);
        line.anchor(-9, y);
        // Um die toString-Methode zu testen
        add(line.debug());
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new AlignmentDemo());
    }
}
Zum Java-Code: demos//home/runner/work/engine-pi/engine-pi/subprojects/demos/src/main/java/demos/classes/actor/image_text/AlignmentDemo.java

color (Farbe)

{
    ImageText.Font font = new ImageText.Font(
            "main-classes/actor/image-text/tetris")
                .supportsCase(CaseSensitivity.UPPER);

    public ColorDemo()
    {
        backgroundColor("#eeeeee");
        int y = 9;
        for (Map.Entry<String, Color> entry : colors.getAll().entrySet())
        {
            setImageText(entry.getKey(), -5, y);
            y--;
        }
    }

    public void setImageText(String color, int x, int y)
    {
        add(new ImageText(font).content(color)
            .pixelMultiplication(4)
            .color(color)
            .anchor(x, y)
            .debug());
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new ColorDemo(), 600, 800);
    }
}
Zum Java-Code: demos//home/runner/work/engine-pi/engine-pi/subprojects/demos/src/main/java/demos/classes/actor/image_text/ColorDemo.java

real-world example (Beispiel aus der Praxis)

 */
public class CopyrightScene extends BaseScene implements KeyStrokeListener
{
    public CopyrightScene()
    {
        super(null);
        backgroundColor(COLOR_SCHEME_GREEN.getWhite());
        ImageText text = TextProvider.text().content("\"TM and ©1987 ELORG,\n" + //
                "Tetris licensed to\n" + //
                "Bullet-Proof\n" + //
                "software and\n" + //
                "sub-licensed to\n" + //
                "Nintendo.\n" + //
                "\n" + //
                "©1989 Bullet-Proof\n" + //
                "software\n" + //
                "©1989 Nintendo\n" + //
                "\n" + //
                "All rights reserved.\n" + //
                "\n" + //
                "original concept\n" + //
                "design and programm\n" + //
                // Im Original: by Alexey Pazhitnov."
                // ." kann mit ImageText nicht als ein Zeichen dargestellt
                // werden.
                // U+E000..U+F8FF BMP (0) Private Use Area
                "by Alexey Pazhitnov\uE000\n" + "\n")
            .lineWidth(21)
            .hAlign(HAlign.CENTER);
        text.anchor(-2, 0).debug();
        add(text);
        delay(4, this::startTitleScene);
    }

    public void startTitleScene()
    {
        Tetris.start(new TitleScene());
    }

    /**
     * Wenn eine beliebige Taste gedrückt wird, wird zum nächsten Bildschirm,
     * der Titelszene, gesprungen.
     */
    public void onKeyDown(KeyEvent keyEvent)
    {
        startTitleScene();
    }

    public static void main(String[] args)
    {
        Controller.debug();
        Tetris.start(new CopyrightScene());
    }
}
Zum Java-Code: demos//home/runner/work/engine-pi/engine-pi/subprojects/games/tetris/src/main/java/tetris/scenes/CopyrightScene.java