Blender

Alles was man zum animieren braucht - Blender
 
StartseitePortalFAQSuchenMitgliederAnmeldenLogin

Teilen | 
 

 BGE 2.49b Game-Runtime: ImportError No module named Blender

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
PeterBluewin
Blender Administratoren
Blender Administratoren
avatar

Anzahl der Beiträge : 96
Alter : 32
Ort : Washington
Betriebssystem : Windows XP
Anmeldedatum : 30.07.10

Charakter einstellen...
Wesen: Spezies XXX

BeitragThema: BGE 2.49b Game-Runtime: ImportError No module named Blender   Fr Jan 27, 2012 5:06 pm

Hi,
Ich habe heute (Sonntag) den ganzen Tag mal mir die Sache - warum in einer Runtime der Fehler kommt und in Blender nicht - angesehen, inklusive Source-Files von Blender. Hier ein kleiner und kurzer Erklärungsversuch. Very Happy Cool

Blender und der Blenderplayer, wie auch ein Export in eine Runtime unterscheiden sich grundsätzlich durch die Nutzung bzw. die Möglichkeit zur Nutzung unterschiedlicher Module. Dabei fehlt vor allem das internen Modul "Blender" in den Runtimes, dass nur bei gestartetem Blender-Programm vorhanden ist. Ein Grund dafür liegt zum einen in der Organisation von zwei unterschiedlichen Entwicklungspaketen und Gruppen, dem Entwickungstheam von Blender und dem vollkommen davon unabhängigen Entwicklungsteam von Python. Beide Pakete bilden die funktionale Ausstattung des Programms Blender. Wird eine Runtime aus dem Programm Blender für z.B. eine Game erzeugt, ist der Anspruch, dass keine Blender-Installation zum Ablauf dieses Programms vorhanden sein muß. Das gleiche gilt für den Blenderplayer, der von einer Blender-Installation vollkommen unabhängig arbeiten soll. Diese Bedingungen werden erfüllt, wenn die Basis-Module von Python im Verzeichnis vorhanden sind, in dem die Runtime abgelegt worden ist.

Das zentrale Modul in der Entwurfsumgebung "Blender" ist das Blender-Modul. Es wird jedoch bei einem Export in eine Runtime nicht als ladbares Modul mit exportiert. Ebenfalls kann es nicht über die Angabe von Pathes als Python-Modul nachgeladen werden, da es sich um ein Builtin-Module handelt, dass vollkommen in C geschrieben worden ist (alle Funktionen liegen im Sourcecode in /source/blender/blenkernel/intern). Es wird bei der Erzeugung einer Blender.EXE innerhalb des Programms angelegt und steht deshalb ausschließlich nur zur Entwurfszeit eins Games oder anderer Entwürfe im Programm Blender zur Verfügung. Ein Python-Module für die Schnittstelle der C-Methoden zu Python steht zur Zeit nicht zur Verfügung oder ist nicht bekannt. Da jedoch alle C-Methoden zum Zugriff auf die Ressourcen von Blender, wie z.B. der internen Datenbank, auch zur Runtime vorhanden sind, ist es möglich, mit diesen Methoden ein Teil der Ressourcen des Blender-Modules auch zur Runtime nutzen zu können. Dafür müssen jedoch die entsprechenden Interfaces zu Python geschrieben werden, die bisher fehlen.

Module und Funktionen in Blender und zur Runtime können mit den beiden folgenden Methoden in eine Textdatei ausgegeben werden. Die Methoden listen alle Builtin- und externen Module auf. Der Dateiname ist "builtin_modules.txt". In diesen Dateien kann z.B. mit einem einfachen Texteditor nach einer Funktion oder einem Modul gesucht werden.
Code:

def getSubitems(item, file, line):
   text = str(item) + os.linesep
   file.writelines(text)
   file.writelines('  Methodes of '+str(item)+line)
   try:
      for subitem in sorted(dir(__import__(item))):
         if subitem[:2] != '__':
            text = '  ' + str(subitem) + os.linesep
            file.writelines(text)
   except:
      pass
#END getSubitems

def GetBuiltin_Modules(output=''):
   import io
   line = ''
   for n in range(0, 80):
      line = line + '-'
   line = line + os.linesep
   filename = output
   if filename == '':
      filename = 'builtin_modules.txt'
   with io.open(filename, 'w+b') as file:
      file.writelines('Builtin modules'+line)
      for item in sorted(sys.builtin_module_names):
         getSubitems(item, file, line)
      file.writelines(os.linesep+'Loadable modules'+line)
      for item in sorted(sys.modules.keys()):
         getSubitems(item, file, line)
      file.close()
# END GetBuiltin_Modules
Nutzung der Methoden:

    1. Blender starten.
    2. Den voreingestellten Cube nutzen und auf die Logic-Panels gehen.
    3. Einen Sensor hinzufügen. "Alway" ist OK.
    4. Ein Controller vom Typ Python hinzufügen. Die Methode "GetBuiltin_Modules" eintragen.
    4.1 Sensor und Controller natürlich verbinden! Cool
    5. Game in Blender starten. Es wird eine Textdatei mit dem Namen "builtin_modules.txt" erzeugt. Die Datei umbenennen in "Blender-builtin_modules.txt"
    6. Jetzt ein Export als Runtime mit "File, Save Game as Runtime..." ausführen und in einer EXE speichern.
    7. Die exportierte EXE starten. Es wird eine Textdatei mit dem Namen "builtin_modules.txt" erzeugt. Die Datei umbenennen in "Runtime-builtin_modules.txt"


Jetzt fehlt nur noch die Schnittstelle zwischen den Builtin-Methoden in C und Python. Das wäre doch was. Hier die vollständige Liste aller Dateien für eine unabhängige Runtime. Blenderplayer und eine Runtime-Exe greifen auf die Bibliotheken Python25.zip und Python26.zip zu, in dem die Python-Interfaces zu den Buildin-Modules des Systems stehen (z.B. os, sys, etc.). Dafür ist das Python-Team zuständig. Die hier dargestellte Liste gilt nur für 2.49b.
Code:

/runtime/avcodec-52.dll
/runtime/avdevice-52.dll
/runtime/avformat-52.dll
/runtime/avutil-50.dll
/runtime/BlenderGame.exe  -->> die Runtime
/runtime/blenderplayer.exe
/runtime/gnu_gettext.dll
/runtime/libfaac-0.dll
/runtime/libfaad-2.dll
/runtime/libmp3lame-0.dll
/runtime/libpng.dll
/runtime/libtiff.dll
/runtime/libx264-67.dll
/runtime/Microsoft.VC90.CRT.manifest
/runtime/Microsoft.VC90.OpenMP.manifest
/runtime/pthreadVC2.dll
/runtime/python25.dll
/runtime/python25.zip
/runtime/python26.dll
/runtime/python26.zip
/runtime/SDL.dll
/runtime/swscale-0.dll
/runtime/vcomp90.dll
/runtime/wrap_oal.dll
/runtime/xvidcore.dll
/runtime/zlib.dll
Vorläufige Lösung bzw. Workaround um dennoch alles von Blender in einer "Runtime" nutzen zu können. Nachteil: Ein Standalone ohne Blender-Installation ist dann logischerweise nicht mehr möglich!
Eine Batch-Datei in Windows schreiben. Hier die Zeile:
Code:
"c:\programs\blender foundation\blender\blender.exe" -W <file.blend>
Gruss Peter
Nach oben Nach unten
Benutzerprofil anzeigen http://www.wipn.de/blenderproject
 
BGE 2.49b Game-Runtime: ImportError No module named Blender
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» Benachrichtigung bei Freundschaftsanfrage ohne Module
» Index-Module nur auf der Forums-Startseite anzeigen
» MMOPRG Game: http://tanzteufel.forumsfree.de/
» Module direkt im Forum bearbeiten
» Module nur auf bestimmten Seiten anzeigen.

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
Blender :: Blender :: Verwendung des Game-Engines-
Gehe zu: