GLBasic forum

Other languages => GLBasic - de => Topic started by: ProN3rd on 2014-Jan-12

Title: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-12
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
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: CptnRoughnight on 2014-Jan-12
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 ;)
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-13
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?
Title: AW: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: CptnRoughnight on 2014-Jan-13
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
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-13
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
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: kanonet on 2014-Jan-13
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 :(
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-15
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?
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: kanonet on 2014-Jan-15
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.
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-16
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?
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: kanonet on 2014-Jan-16
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. ;)
Title: Re: Ladezeiten durch Grafiken und Sound in den Griff kriegen
Post by: ProN3rd on 2014-Jan-17
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)