Java Processing in Anwendung?
Hallo,
Ich habe mit ein paar Freunden ein kleines Spiel in Java Processing programmiert.
Jetzt habe ich 2 Fragen.
- Wenn ich ein Bild als Hintergrund in meinem Spiel haben will, wie mache ich den Dateien-Pfad unabhängig vom Namen des USB-Stickers. Ich schreibe auf einem Programm, welches wir von der Schule bekommen haben, weshalb dies vielleicht nicht ganz so einfach sein könnte, aber immer wenn ich mein Spiel, welches auf einem USB Stick ist, in einen anderen Pc einstecke verändert sich der Name, aufgrund der schon vorhanden Speicher. Manchmal heißt es G://background.png aber manchmal auch F://background.png. Es ist ziemlich nervig das im Code immer wieder zu ändern. Deshalb die Frage, ob es da einen Weg gibt wie ich immer auf das Bild zugreifen kann, ohne den Code zu ändern.
- Wenn ich mein Code jetzt fertig habe, wie kann ich den Code in ein unabhängiges Programm umwandeln, welches ich verschicken und ohne Code Editor ablaufen lassen kann.
Vielen Dank im vorraus
LG
1 Antwort
1) Gib einen relativen Pfad an. Dein Bild sollte also in dem Ordner liegen, in dem du auch dein Sketch gespeichert hast.
Nutze am besten den Menüpunkt unter Sketch > Datei hinzufügen. Daraufhin wird dir in deinem Sketchverzeichnis ein data-Ordner angelegt, in dem die neue Datei liegt.
PImage image = loadImage("data/yourImage.jpg");
2) Unter Datei > Exportieren kannst du dein Sketch zu einer Executable exportieren lassen. Der entsprechende Export wird dir im Sketchverzeichnis angelegt. Neben der exe-Datei musst du allerdings den data- und den lib-Ordner immer einzeln mit dazu transportieren.
Eine andere Lösung wäre es, Processing Core sowie das Bild in ein Java-Projekt einzubinden und dann eine JAR zu bauen, die alle Ressourcen inkludiert. Für diesen Arbeitsschritt wäre eine IDE wie Eclipse, NetBeans oder IntelliJ (evt. mit einem Buildverwaltungstool wie Maven oder Gradle) hilfreich. Das Resultat könnte man erneut (mittels launch4j) in einen Wrapper packen.
Bei den Bildern (oder anderen zu ladenden Ressourcen wie bspw. Textdateien) sollte darauf geachtet werden, dass sie als Stream geladen werden müssen. Ungefähr so:
var inputStream = getClass().getResourceAsStream("/resource/...");
var image = ImageIO.read(inputStream);
Siehe dazu auch hier:
Das Image-Objekt dürfte man dann an den Konstruktor von PImage übergeben können.
var sketchImage = new PImage(image);
Kurzum: Wenn du diesen Weg gehen möchtest, brauchst du ein paar Java-Kenntnisse.