Hallo, ich möchte ein kleines Projekt initiieren, welches aber schon *fast* fertiggestellt ist. Ich hab nur leider ein paar Probleme bei der Programmierung, deshalb wollt ich mal die Community fragen ☺
Der GameLauncher an sich funktioniert eigentlich schon, nur eben nicht so, wie ich es will.
Im Anhang ein kleines deb-Paket, welches man installieren kann, mit funktionierendem GameLauncher.
Deinstallation geht über "sudo apt-get remove gamelauncher", starten kann mans über "gamelauncher" oder halt unter Anwendungen → Systemwerkzeuge → gamelauncher.
Wie gesagt, das ganze funktioniert eigentlich schon fast. Jedenfalls, vorwiegend ist es dafür gedacht, dass man seine Blender-Projekte, welche in der GameEngine laufen, auf einfache Art und Weise in ein deb-Paket packen kann, sodass man als Ubuntu-User dieses Paket nur anklicken muss, installieren und dann auch schon starten kann.
Ich zeige euch hier mal das aktuelle Skript, welches das Spiel später startet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #!/usr/bin/env python # -*- coding: utf-8 -*- # Import-Anweisungen import gtk import os import sys UIfile = "gamelauncher.ui" #CONFIG = "gamelauncher.config" SCRIPTDIR = str(os.path.dirname(os.path.abspath(sys.argv[0]))) FOLDER = "game" CONFIG = "" PROGRAM = "blenderplayer" FILE = "test.blend" class gui(object): builder=None def __init__(self): guidir = str(SCRIPTDIR + os.sep + UIfile) # Init for builder self.builder = gtk.Builder() self.builder.add_from_file(guidir) self.builder.connect_signals(self) # Get Mainframe) mainframe = self.builder.get_object('mainframe') # Set settings mainframe.set_title("GameLauncher") # Show Mainframe mainframe.show() # and start the game self.startgame() # run() to start program def run(self): try: gtk.main() except KeyboardInterrupt: pass # Quit program def quit(self): gtk.main_quit() # Close-Button def on_mainframe_delete_event(self, *args): self.quit() ########################################## # Game specific def startgame(self): command = str(PROGRAM + " " + CONFIG + " \"" + SCRIPTDIR + os.sep + FOLDER + os.sep + FILE + "\"") os.system(command)# self.quit() ########################################## # Actions def on_act_quit_activate(self, widget, *args): self.quit() if __name__ == '__main__': launcher = gui() launcher.run() |
Aktuell ist es so, dass der Launcher startet und dann das Spiel lädt. Ohne dass der Launcher auch nur irgendwie angezeigt wird.
Ich brauche aber eigentlich folgende Funktion: Nachdem unter "main" "launcher.run()" ausgeführt wird, soll der Launcher seine GUI zeigen (mainframe.show()). Das Funktioniert soweit. Wenn der launcher geladen wurde (dafür hab ich leider keine Funktion gefunden, deshalb wird startgame() aktuell im Init-Block ausgeführt), sollte startgame() ausgeführt werden. Hierbei sollte dann ein Subprocess gestartet werden, welcher aber im aktuellen Programm läuft. D.h., der so gestartete Blenderplayer soll *keinen* eigenen Eintrag in der Fensterliste haben und wenn möglich auch nicht im Taskmanager angezeigt werden (bzw. Prozessliste).
Und: schließt man den GameLauncher, so soll auch das Spiel (bzw. der blenderplayer) gestoppt werden.
Wäre schön wenn mir hier jemand helfen kann.
Ich konnte mich übrigens nur schwer entscheiden obs unter "Projekte" läuft oder unter "Shell und Programmieren", aber ich denke, da es ein kleiens Projekt ist, ist die Kategorie hier im Forum schon richtig, wenn nicht dann bitte verschieben.
mfg