Rooms Vorladen (Ladescreen) - wie?

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rooms Vorladen (Ladescreen) - wie?

    leute, ich hab ziemlich große bilddatein in meinem game (bilder von 9000x768) oder gif datein mit 10mb ^^ .. das sollte auch so sein, mit der gesamtgröße hab ich nicht so das problem.

    als ich noch alles im GM implementiert hatte, waren die gm ladezeiten an sich schon 3-4 minuten, was zum testen extrem nervig war, also hab ich alles größere ausgelagert mit " sprite_add " und " background_add" etc. und funzt auch soweit wunderbar. schöne ladezeiten von 15-20 sek. erreicht

    das problem ist, wenn ich von level zu level komm, dann hängt mein spiel immer für 1-1,5 sek. am level anfang, weil die grafiken ja erst "reingeladen" werden müssen.

    gibts ne möglichkeit n room als "ladebildschirm" zu machen, der das nächste level vorläd, so das man einfach reinspringt und es losgeht (oder mit transition n schönen übergang erzeugt ^^ )

    wär super wenn mir einer helfen könnte, weil so siehts nicht so super geil aus (ich hab extrem viele objekte und trigger steine in meinen rooms, also kann ich nicht alles von außen laden, sondern nur die größten sachen, wie backgrounds und riesigen sprites etc. )

    dank euch für hilfen :)
  • naja 1,5sekunden sind ja nicht so viel oder ?(

    und soviel ich weiß gehts nicht.
    Aber vllt könntest du in einer Ecke des rooms ein Load- Sprite hinpacken und am anfang des rooms erst dahin zeigen :rolleyes:
    nach einer Zeit dann halt View wechseln.
    leicht & gut :)

    mfg

    :D
  • Natürlich gehts.
    Könntest zb. eine schwarzes rechteck über den view zeichenen, screen_refresh() anwenden und zb. immer nach 10% der geladenen Grafiken (Bei 100 Grafiken zb. nach jeder 10.) den Balken größer zeichnen und wieder screen_refresh() anwenden.
  • 1. 1,5 sek. IST ARSCHLANG ^^ das nervt so ohne ende das ich kotzen könnte :D

    2. die idee hört sich nicht schlecht an, aber gibts nicht sowas wie n "preload des nächsten levels"

    also ich stell mirs so vor, das ich einen ladebildschirm hab (oder irgendwie die 1,5 sek. überbrück durch ne ladegrafik) und dann halt das game startet, aber halt ohne verzögerung durch das externe auslagern.

    ich hab schon so krasses zeug für den GM gesehen, das geht doch bestimmt ^^ :D
  • Also das was TrunX vorgeschlagen hat, bewirkt genau das, was du in deiner zweiten Frage möchtest.
    Entschuldige wenn die Frage sinnlos ist, aber wofür brauchst du backgrounds von 9000 x 7500 ? Ließe sich das nicht mit Tilesets oder anderen Funktionen des GM besser und schneller umsetzen?
  • Sowas macht man einfach nicht, so grosse Backgrounds, das erhöht die Datengrösse um ein vielfaches und das Resultat ist nicht unbedingt viel besser.
    Was man in solchen Fällen macht, ist das ganze mit vielen kleineren Tilesets einen so grossen Room zu belegen, dann haste genauso abwechslungsreiche Gegenden und wesentlich geringere Ladezeiten.
    By the way, bei so nem grossem Raum ist es sehr zu empfehlen, gerade nicht aktive Instanzen mit instance_deactivate vorrübergehend zu deaktivieren, bis etwa der Player in seine Nähe kommt, falls du das nicht schon erledigt hast. Das würde Performance nochmal enorm steigern.
    "das war meine letzte flamewar PM an dich ."
  • ja, ich weiss das man das normalerweise nicht macht, auch weil ab irgendwo 5000px länge verzerrt es das bild weil selbst die besten grafik karten das dann irgendwie dumm dastellen.

    wir teilen das 9500er bild wahrscheinlich in 2x 4500 auf .. aber mit tiles geht es halt nicht weil es ein ellenlanger handgezeichneter background ist.. das mit den tiles.. hm.. ich kanns mir grad nicht vorstellen, schneidet man dann das bild in einzelteile und läd die nacheinander?

    das mit dem deactivieren haben wir noch nicht. performance ist noch akzeptabel, ich muss nur irgendwie den 1,5 sek. ruckler am anfang rausbekommen.

    es gehen auch irgendwie alternativ lösung, von wegen "blend über den screen n ladebild ein das dann wegfadet" in der zeit läd das spiel im hintergrund rein und ist dann voll da wenn das spiel anfängt

    k.p wie man das machen sollte ^^
  • ich hab das von dir gelesen und das probier ich auch grad einzubaun ^^ ich bin nur nicht so der pro und mach viel nach try and error... meist aber weil mir einer n ansatz vorgibt den ich dann einfach ausbau.

    probiern probiern probieren .. ich hör mir nur möglichst viele meinungen an um alles mögliche zu bedenken ;)

    das mit dem instance_deactivate werd ich wohl jetzt auch noch machen um alles etwas zu verbessern (performance mäßig)
  • Du kannst dir gerne auch das hier anschauen: Wallpainter .
    Ein altes Projekt von mir, was dem User einen Desktophintergrund zeichnen sollte, habs aber später aufgehört zu entwickeln.
    Bevor der bewegliche Desktop aufgeht kommt ein Ladebildschirm, der solange dableibt, bis alle Instanzen im Raum sind.
    Vielleicht ist das in etwa, was du machen willst?
  • Ja zB. zerteilen des Bildes in mehrere Einzelteile und nach Bedarf reinstreamen... Du checkst, welche Teile des Bildes im Moment sichtbar wären, und lädst sie dynamisch während dem Spiel. Klingt komplizierter als es ist.
    "das war meine letzte flamewar PM an dich ."
  • @ blubberblub

    könntest du mir n beispiel kurz machen (nur grob) damit ich ansatzweise versteh was du meinst

    @ wlanuser

    es wär natürlich extrem geil wenn man davon die gm datei haben könnte, die exe sieht gut aus, aber ich kann daraus nix lesen ^^
    ich brauch irgendwie n ansatz den ich sozusagen dann einfach ausbau
  • Die gmk kann ich dir leider nicht geben, weil ich zu unübersichtlich gearbeitet habe und man mit dem Ladescreen von mir schlecht einen Rescourcelader oder ähnliches bauen kann.
    Ich hab dir ein kleines Example gemacht. Damit sollte es klappen.
    Dateien
  • ok, extrem geil allein schon weil die mortal kombat mukke drinnen vorkommt ^^

    sowas ähnliches hab ich schon, jetzt müsst ichs nur hinbekommen das der background und die instances VOR dem raumbetreten (also bevor "room_goto(nextlvl)" geladen werden.

    also während die prozentzahlen hochladen ^^

    danke danke, das hilft mir eventuell auch weiter (hab sowas ähnliches auch benutzt)
  • Du könntest auch ALLE sprites usw. vor dem spiel laden, dann brauchst du nur noch einen Ladescreen oder auch gar keinen.
    Ich lade auch im ersten Raum immer alles, bevor es richtig losgeht.
  • nene^^ es ist extrem wichtig das die sprites und instancen, backgrounds pro level geladen werden. game maker läd ja eigentlich normalerweise das ganze spiel auf einmal, so das überhaupt keine ladezeiten entstehen .. nur ist das spiel schon so umfangreich das ich auf einem schwächeren pc mit 2,8gh, 512mb ram und 128mb grafikkarte es nicht zum laufen bring, weil der speicher komplett ausgelastet wird und es garnicht zu ende läd ^^

    gebaut wird das ganze auf nem high end rechner, aber es soll auf fast jedem system laufen, soweit es halt geht.

    daher ist es wichtig das soviel wie möglich extern reingeladen wird um die performance überall gleich zu halten.

    die option beim laden von sprites "sprite_add" -- "preload" .. ich hab sie immer auf 0 (wurd mir so gerraten) ..wenn ich während dem ladebildschirm die instancen und grafiken mit preload reinlad, sind sie dann schon "vorgeladen" für das nächste level das kommt, oder versteh ich das wort irgendwie falsch?

    ich weiss nicht genau was preload macht ^^ event. kann mich einer aufklären.

    oder mir sagen wie ich in einem raum instancen laden kann, die im nächsten raum dann abgerufen werden (sozusagen in eine art zwischenspeicher geladen werden für noch schnelleren zugriff)

    danke vielmals für die vielen posts, ich bin schon extrem gut vorran gekommen durch die viele hilfe.
  • Könntest du uns diesen Handgezeichneten Background einmal zeigen? Ich mein nicht das ganze Ding sondern nur einen Ausschnitt, weil wenn du nicht gerade die Malereien der Sixtinischen Kapelle gezeichnet hast sind andere Lösungsvarianten wesentlich besser.
  • die hintergründe kann ich leider nicht rausrücken ^^ aber sie sind wirklich wirklich wirklich sehr detailiert und alle handgezeichnet. es wiederholt sich so gut wie kein pixel (außer event. direkt nebeneinander, oder schwarze linien ^^ )

    schlag mir mal die methode vor, ich machs mit den backgrounds event. wie oben erwähnt mit dem tiles load (also stücke laden, abhängig von der view)

    ich hoff das geht gut ^^ on the fly laden wär schon ziemlich geil, besonders weil dann das erste stück grad mal 1400x768 ist und das sicherlich in null komma nix geladen wird.

    komischerweise haben die testgamer alle gesagt das sie den eingebauten "fake ladebildschirm" (der läd im moment noch garnix) irgendwie gut finden, weil sie dann sehen das das nächste lvl kommt ^^ vorher ging ihnen das "ins next lvl" gejumpe zu schnell xD

    ich finds auch so besser wenns n ladebildschirm für 1-2 sek. zwischendrin gibt ^^ (und wir haben lustige animationen darin ^^ )
  • Hi

    @ blubberblub

    könntest du mir n beispiel kurz machen (nur grob) damit ich ansatzweise versteh was du meinst

    Ich hab mir die Mühe gemacht und ein System zum dynamischen Laden von mehreren Bildern, die zusammen einen Background ergeben, entwickelt.
    Zusätzlich hab ich noch ein kleines Tool programmiert, um ein Bild in viele kleine Teile zu zerteilen, um direkt geladen werden zu können.
    Hier und da hats noch ein paar kleine Fehler, und musst halt fragen, wenn was nicht funktioniert oder unklar ist.

    uploading.com/files/de6bm12f/BackgroundLoader.rar/

    Mit der Aufteilung und den ganzen möglichen Variablen beim oBackgroundLoader musste halt n bissl rumprobieren, bis de das Optimale gefunden hast.
    Ich habs leider schlecht dokumentiert, also einfach doof reinfragen, und nich gleich wegwerfen(Hab mir immerhin Mühe gegeben ;) :D).
    "das war meine letzte flamewar PM an dich ."
  • das ist genau das was ich suche ^^ nur funktioniert es auch so das ich nicht den ganzen background vorher laden muss.

    das ist ja genau das problem, ich würd ihn am liebsten zerschneiden und ihn dann an der bildgrenze reinladen.
    ich muss mal schaun ob ich den code so umstellen kann das er einfach dann "on the fly" läd.

    so scheint es das das hintergrundbild schon komplett vorhanden ist, oder irr ich mich in dem punkt?