Skip to content

config (Konfiguration)

Die Standardeinstellungen der Engine Pi können mithilfe einer Konfigurationsdatei names engine-pi.properties verändert werden. Dabei handelt es sich um eine Java-Properties-Datei, also ein sehr einfaches, selbsterklärend Format. Beim Starten eines Projekts sucht die Engine Pi im Ausführungsorder der Anwendung nach dieser Datei. Falls keine solche Datei vorhanden ist, erstellt die Engine eine engine-pi.properties mit den Standardwerten:

game_instantMode=true

graphics_framerate=60
graphics_windowWidth=768
graphics_windowHeight=576
graphics_windowPosition=NONE
graphics_colorScheme=Gnome
graphics_pixelMultiplication=1
graphics_screenRecordingNFrames=2

sound_soundVolume=0.5
sound_musicVolume=0.5

debug_enabled=false
debug_verbose=false
debug_renderActors=true
debug_actorCoordinates=false

coordinatesystem_linesNMeter=-1
coordinatesystem_labelsOnIntersections=false

Die einzelnen Einstellmöglichkeiten sind in Konfigurationsgruppen, die jeweils ein Präfix haben, organisiert:

Das statische Attribut Controller.config der Klasse Controller bietet Zugriff auf alle Einstellmöglichkeiten.

import pi.Controller;
Controller.config.graphics.windowWidth()

Das config-Objekt kann auch über einen statischen Import eingebunden werden: import static pi.Controller.config;. Statt Controller.config kann dann etwas kürzer config geschrieben werden.

import static pi.Controller.config;
config.graphics.windowWidth()

Das folgende Codebeispiel testet alle Einstellmöglichkeit mit den Standardwerten:

import static pi.Controller.config;

assertEquals(true, config.game.instantMode());

assertEquals(768, config.graphics.windowWidth());
assertEquals(576, config.graphics.windowHeight());
assertEquals(Direction.NONE, config.graphics.windowPosition());
assertEquals(32.0, config.graphics.pixelPerMeter());
assertEquals(0.05, config.graphics.zoomChange());
assertEquals(60, config.graphics.framerate());
assertEquals("Gnome", config.graphics.colorScheme());
assertEquals(1, config.graphics.pixelMultiplication());
assertEquals(2, config.graphics.screenRecordingNFrames());

assertEquals(0.5, config.sound.soundVolume());
assertEquals(0.5, config.sound.musicVolume());

assertEquals(false, config.debug.enabled());
assertEquals(false, config.debug.verbose());
assertEquals(true, config.debug.renderActors());
assertEquals(false, config.debug.actorCoordinates());

assertEquals(-1, config.coordinatesystem.linesNMeter());
assertEquals(false, config.coordinatesystem.labelsOnIntersections());

Benutzerdefinierte Konfigurationsgruppen

Die Engine Pi bietet die Möglichkeit, auch eigene Konfigurationsgruppen zu definieren und dem config-Objekt hinzuzufügen.1 Die Klasse MyConfigGroup definierte eine Einstellmöglichkeit in Form eines Attributs mit dem Namen myInt. Die dazugehörenden Getter- und Setter-Methoden haben - wie in der Engine Pi üblich - kein get- bzw. set-Präfix:

import pi.annotations.Getter;
import pi.annotations.Setter;
import pi.config.ConfigGroup;
import pi.config.ConfigGroupInfo;

@ConfigGroupInfo(prefix = "custom_")
public class MyConfigGroup extends ConfigGroup
{
    private int myInt = 23;

    @Setter
    public int myInt()
    {
        return myInt;
    }

    @Getter
    public void myInt(int myInt)
    {
        this.myInt = myInt;
    }
}
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/resources/config/MyConfigGroup.java

import static pi.Controller.config;

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

public class CustomConfigGroupDemo extends Scene
{
    static
    {
        MyConfigGroup custom = new MyConfigGroup();
        config.add(custom);
        custom.myInt(42);
    }

    public CustomConfigGroupDemo()
    {
        MyConfigGroup custom = config.getGroup(MyConfigGroup.class);
        // Oder:
        // MyConfigGroup custom = (MyConfigGroup) config.getGroup("custom_");
        add(new Text(custom.myInt()).center(0, 0));
    }

    public static void main(String[] args)
    {
        config.game.instantMode(false);
        config.graphics.pixelPerMeter(512);
        Controller.start(new CustomConfigGroupDemo());
    }
}
Zum Java-Code: demos/subprojects/demos/src/main/java/demos/docs/resources/config/CustomConfigGroupDemo.java