Ladezeiten durch Grafiken und Sound in den Griff kriegen

Previous topic - Next topic

ProN3rd

und zwar ist der Programmordner an die 50 MB gross und es wird alles vor der Hauptschleife geladen nach dem Schema:

Code (glbasic) Select

GLOBAL bild1 = GENSPRITE(); LOADANIM "Stuff/bild1 .png", bild1 , 32,32
GLOBAL jumpsound = GENSOUND();LOADSOUND "playerjump.wav", jumpsound,0
//und so weiter und so fort, ingesamt 50MB Daten


Dadurch entsteht ein 3 Sekunden Blackscreen bevor das Startmenu zu sehen ist, und bei "normal schnellen" Computern - ohne SSD - sogar bis zu 10 Sekunden.

Natürlich könnte ich zunächst nur die Menugrafiken laden und den Rest erst später, aber das würde das Problem nur verschieben. Ich will einen "Loading Screen" machen, aber wie soll das gehen? Ich will ja praktisch alle 1 MB oder so, einen Balken rendern mit der Anzeige, wieviel schon geladen wurde.

Das zweite Problem bezieht sich ebenfalls auf Ladezeiten: Beim Mapwechsel (falls Level gewechselt wurde) wird eine andere mp3 abgespielt:

Code (glbasic) Select

If levelchange = TRUE and level = level1
   currentmusic$ = "stage1.mp3"
   PLAYMUSIC currentmusic$,TRUE
   levelchange = FALSE
ENDIF


Wenn ich also einen solchen Raum betrete, laggt, es, als wenn die frames krass droppen würden für kurze Zeit.

P.S.: Update() läuft fix mit 30 ticks, und Render() wird entsprechend interpoliert

CptnRoughnight

Mach einfach eine Liste von Strings in der die zu ladenden Grafiken gespeichert werden (Pfade+Dateinamen)
Dann eine Schleife die du durchiterierst und dann kannst du während es lädt, in jedem schleifenzyklus deinen Balken um soundso viel Prozent erhöhen und darstellen.

Code (glbasic) Select

GLOBAL files$[]
DIM files$[4]

files$[0] = "test.bmp"
files$[1] = "test1.bmp"
files$[2] = "test2.bmp"
files$[3] = "test3.bmp"
files$[4] = "test4.bmp"

GLOBAL i

FOR i= 0 TO 4
CLEARSCREEN (RGB(0,0,0))
PRINT "Datei :"+i+" wird geladen",100,100
SHOWSCREEN
LOADSPRITE files$[i],i
NEXT


so in etwa, nur fix hingezimmert... ohne Gewähr ;)

ProN3rd

Hey, das hat super geklappt, hab jetzt einfach ein paar Prints und Showscreens reingesetzt

Kann man mp3 eigentlich auch preloaden?

Und noch was anderes, wie geht ihr eigentlich vor, wenn das Prog irgendwann recht umfangreich ist und immer ewig zum compilieren braucht?

CptnRoughnight

Das mit den mp3 kann ivh dir grad nicht sagen...

Große Projekte auf mehrere Quelldateien aufteilen, GLBasic compiliert dann die geänderten Dateien neu den rest braucht es ja nicht nochmal zu übersetzen

ProN3rd

ich habe das prog in diverse gbas aufgeteilt, meinst du das?

aber egal auf welcher seite ich gerade arbeite, das compilieren dauert immer so zwischen 15 und 20 sec mittlerweile

kanonet

Die Frage mit den MP3s verstehe ich nicht, warum sollten die anders behandelt werden, wie deine WAVs? BTW warum verwendest du überhaupt noch WAVs? Alles in MP3 und klar kannst du es auch preloaded, falls nötig.

CptnRoughnight hat recht, splitte dein Projekt in viele gbas Dateien, dann dauert der erste Compiliervorgang zwar noch genauso lange, jeder weitere geht aber schneller falls nicht alle Dateien geändert wurden.
EDIT ja genau so. Sollte schneller sein :(
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

ProN3rd

hmm wie geht das denn mit den wavs und mp3s?

mp3s lade ich so:

currentmusic$ = "level1.mp3"
PLAYMUSIC currentmusic$,TRUE

und wavs so:

GLOBAL shotsound= GENSOUND();LOADSOUND "shotsound.wav", shotsound,0   
PLAYSOUND(shotsound,0,1)

hier sind ja zwei unterschiedliche dinge am werk, playsound und playmusic. Kann man die music auch preloaden? Kann man auch mp3 als "Sounds" nehmen? Wie ist das am einfachsten zu lösen?

Kann man übrigens eine Klasse auf mehrere GBAS aufteilen?

kanonet

Natürlich kannst do sowohl PLAYSOUND als auch PLAYMUSIC sowohl mit MP3s als auch mit WAVs füttern (auch andere Formate wie OGG sollten gehen, wenn das entsprechende System dies unterstützt), wüsste nicht, warum das eine Format gehen sollte und das andere nicht. Im Zweifelsfall einfach ausprobieren.

Nein in GLBasic kannst du einen Type leider nicht über mehrere Dateien aufteilen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

ProN3rd

danke für die antworten. wie geht das denn nun mit der mp3 preloaden?

bin bisher so vorgegangen wie das in der Hilfe steht und da wird ja zwischen sound und music unterschieden, und ich hab auch keinen Befehl LoadMusic gesehen oder so.

ich hab im arrangement immer wieder die befehle PlayMusic, IsMusicPlaying etc.. aber die mp3's werden vorher nicht geladen  wodruch es zum kurzzeitigen lag kommt, falls ein neuer Titel angespielt wird

oder kann ich die mp3 mit loadsound reinladen und auf nen anderen kanal legen, so dass es mit den ganzen Effekt-"Sounds" nicht in die quere kommt?

kanonet

Quote from: ProN3rd on 2014-Jan-16oder kann ich die mp3 mit loadsound reinladen und auf nen anderen kanal legen, so dass es mit den ganzen Effekt-"Sounds" nicht in die quere kommt?
So war es gemeint. Die Hilfe nennt zwar nur WAV Dateien, aber warum sollte eine mp3 nicht gehen? Einfach probieren. ;)
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

ProN3rd

das mit der mp3 klappt irgendwie nicht:

Code (glbasic) Select

GLOBAL intro = GENSOUND(); LOADSOUND "intro.mp3", intro,0
PLAYSOUND(intro,0,1)


wenn ich da ne wav nehme, klappts  :giveup:

übrigens wie krieg ich dynmiaschen stero hin bei den sound? ich kann die nur -1 und +1 im panorama legen, aber zwichenwerte funktionieren nicht  (ausser der 0 natürlich)