also ist IrrRuning() nicht nur eine Test funktion. Sonders sie inizialisiert auch die Events. Das erklärt natürlich einige Probleme die ich hatte. In der vorm ist nirgends was zu lesen gewesen.
IrrRunning() callt :
welches den Device Mainloop aufruft welcher die Rückabe zurückliefert ob das Irrlicht Renderdevice aktiv ist.
habe dies mal für die final manual markiert, werde dazu noch ein paar Anmerkungen schreiben.
Sorry für vorherige Verwirrung:
Bool Params (#True/#False):
- playlooped
- Start Paused
- Track ( return)
Code: Alles auswählen
-------------------------------------------------------------------“*”
*soundnode = IrrKlangPlay3D(*soundsource, 0,0,0, #True, #False, #True)
Ein sound-node pointer wird nur zurückgegeben wenn Track'ing aktiv ist. Ansonsten wird CPU zeit gespart.
Offizielle Info zu IrrKlang:
http://www.ambiera.com/irrklang/docu/in ... artexample
Das bedeutet merere PlayHandler.
Oder bin ich da völlig auf dem Holzweg.
Korrekt ( Nodes genauer gesagt )!
Beispiele siehe IrrKlang examples im Examples/IrrlichtWrapper/IrrKlang/
& Advanced zb das Irr/Arkanoid (
http://www.purebasic.fr/english/viewtopic.php?t=28803).
Du hast auch den Restart Code ausKommentiert. Aber um wirklich zu verstehen was du meinst. Wäre es nett wenn du das nochmal auf Deutsch erklärst.
du stoppst und restartest die engine neu. Es reicht um die jeweilige Szene neuzu initialisieren. Geldaene Objekte werden im hintergrund gecached und müssen beim neuinitialisieren dann auch nicht mehr mit den add befehlen und über den bus ins GPU Memory geladen werden. Somit entsteht weniger Overhead zudem die Engine und somit der Screen nicht neu initialisiert werden muss. Stell dir jede Szene ( Ob interaktiv: sprich man kann auf etwas einfluss nehmen - oder auch nicht ) wie eine Szene in einem 3D Programm vor in welchem deine Nodes den Szenenbaum abbilden. Das neusetzen respektive ein/ausblenden der Objekte erspart das gesamte reinitilisieren. Texturen / Objekte die du nicht mehr benötigst kannst du mit IrrDropPointer() zum löschen markieren. Diese werden dann vom internen Garbage Kollektor automatisch freigegeben ( hierzu ist zu beachten dass die überprüfung der Pointer zu diesen Ressourcen von dir überprüft werden muss wenn dus sicher willst ). Zb darf ein Node welcher ein geFreetes mesh enthält dann später nciht mehr verwendet werden. Eine gute Methode seine Szenen übersichtlich zu behalten sind strukturierte linkedlists / arrays. Mithilfe der IrrGet* befehle lassen sich durch den nodepointer einfach alle möglichen dinge abfragen .. mit IrrSet setzen - und der Rest der Struktur ist dir überlassen ( HP, Shields was auch immer..). Nodes lassen sich mithilfe ihrer ID und Name$ auch von irredit kategorisieren.
Zum besser verstehen, schau dir mal deine programmierten Szenen mit irrEdit an.
speichern kannst du diese mit:
Code: Alles auswählen
*node.l = IrrSaveScene(sceneFile.s)
; respektive:
*Rootnode.l = IrrSaveScene(sceneFile.s)
Neuinitialisieren amcht man eigentlich nur wenn sich Device / Driverspezifische Dinge ändern sollen ( Auflösung, Features, Subsystem etc. ). Auch beim neuinitikalisieren gilt vorsichtig zu sein welche Art von loop ( While, Repeat ) man einsetzt und ob innerhalb dessen noch eine Irrlicht funktion aufgerufen wird welche beim ggf. 2. schleifendurchlauf nach dem IrrStop() ( welches alle Irrlicht Ressourcen freet und deren Pointer dadurch invalidiert ) erfolgt.
Hier eine einfache logik zum überprüfen eines pointer (wie du diese schlussendlich umsetzt bleibt dir überlassen ):
Code: Alles auswählen
If *pointer
; -Wenn pointer initialisiert...
Else
; -andernfalls...
EndIf
If Not *pointer
; Wenn Pointer NICHT initialisiert ....
Else
; andernfalls...
EndIf
IrrKlang:
irrKlang.dll - irrKlang Engine
ikpMP3.dll - irrKlang MP3 Decoder
Ist ein eigenes Subsystem im Wrapper welches eigen initialisiert und gestoppt werden sollte.
Code: Alles auswählen
Sucess.l = IrrKlangStart(#IRRKLANG_ESOD_AUTO_DETECT, #IRRKLANG_ESEO_DEFAULT_OPTIONS)
; stop
IrrKlangStop()
Dieses arbeitet auch mit einer eigenen Ressourcequeue, welche nicht mit IrrDrop() sondern mit:
Code: Alles auswählen
IrrKlangRemoveSoundSource( *source )
; respektive:
IrrKlangRemoveAllSoundSources()
...behandelt werden sollte.
Thalius