Ergebnis 1 bis 11 von 11

Thema: 10 Sekunden Ladezeit -> "Script is hanging"

  1. #1

    10 Sekunden Ladezeit -> "Script is hanging"

    Hallo COmmunity, ich entwickele schon seit geraumiger Zeit ein MegaMan Action spiel, bei dem es vor allem schnell zur Sache geht und Animationen auf Animationen geballert werden.

    Anfangs hatte ich das Problem, dass mit zunehmender Ani-Zahl, diese immer langsamer geladen und das Spiel immer ruckeliger wurde.

    Dann habe ich die Lösung gefunden: Den "Animations "Entruckler""-Script von Monsta(?), der beim laden des Spiels schon alle Anis vorausläd und somit das Spiel ruckelfrei läuft!

    Das neue problem ist nun (was auch nur bei etwas älteren/langsameren Rechnern der Fall ist), dass die Ladezeit der Animationen durch ihre hohe Anzahl (noch < 999, aber bald...) ziemlich lang dauert und der Maker, was ich aus anderen Foren rausgelesen hatte, nach etwa 10 Sekunden Ladezeit, den Script abbricht, das Spiel abstürzt und es die Fehlermeldung "Script is haging" ausgibt -.-


    Meine Frage lautet nun: weis jemand, wie ich diese Prüffunktion mit den 10 Sekunden bzw. den "Script is hanging"-Error abschalten kann?

    Ich bin für jede Hilfe dankbar.

    mfg
    euer Fox

  2. #2
    abschalten lässt sich die funktin zwar nicht, aber man kann sie austricksen.

    eine zeile bevor das entruckler script aufgerufen wird musst du das einfügen:
    Code:
    thread = Thread.new{loop do Graphics.update;sleep(9);end}
    und eine zeile darunter diesen code:
    Code:
    Thread.kill(thread)
    threads werden parallel ausgeführt. so kann man also alle 9 sekunden Graphics.update aufrufen.

  3. #3
    also etwa so?

    Code:
    thread = Thread.new{loop do Graphics.update;sleep(9);end}
    $game_animations = Game_Animations.new
    Thread.kill(thread)
    oder direkt vor/hinter dem ganzen script?

    ich versuchs mal, thx

  4. #4
    Du kannst es auch in eine Methode auslagern:
    Code:
    def long_running_process
      thread = Thread.new do
          loop do
            sleep(5.0)
            Graphics.update
          end
      end
      result = yield
      thread.kill
      result
    end
    Das in den Scripteditor schreiben. Danach kannst du
    Code:
    long_running_process do
      $game_animations = Game_Animations.new
    end
    um ein Aufhängen zu verhindern.

  5. #5
    also...

    @Shining Advances

    das lief gut was den "Script is hanging" angeht aber mein Betatester mit dem älteren PC meinte, die Version würde ingame langsamer sein als die letzte und auch mehr zuckeln.

    trotzdem schonmal danke.

    @-KD-

    deins versuche ich als nächstes, vergleiche dann und nehme die bessere Lösung, Dank auch an dich

    gebe euch beiden einen Credit im Endprodukt

    mfg
    Fox

  6. #6
    Sind eigentlich beides die selben Lösungen xD

  7. #7

    Case Closed!

    okay hab ein Ergebnis erzielt, und zwar nehme ich das von -KD-.

    beides geht, jedoch ist das von -KD- nochmal stabiler laut meinen Betatestern aus USA :P

    also nochmals thx und Credits sein euch spendiert.

    mfg
    Fox

  8. #8
    Wenn du es stabil haben willst, wäre evtl. sogar ein
    Code:
    def long_running_process
      thread = Thread.new do
          loop do
            sleep(5.0)
            Graphics.update
          end
      end
      yield
    ensure
      thread.kill
    end
    zu überlegen. Macht dasselbe, bricht den Thread aber auch beim Wurf einer Exception korrekt ab. In der Praxis ist das aber wahrscheinlich egal, da 99,9% aller Exceptions eh zum kompletten Absturz des Spiels führen.

  9. #9
    öhm okay, jetzt wirds mir dann doch zu hoch :P

    trotzdem thx, läuft nu ja alles.

    ausser du magt hier noch kurz und bündig erklären, was eine "Exception" ist ^^

    mfg
    Fox

  10. #10
    Wenn irgendein Fehler im Programm auftritt, z.B. eine Musik-Datei nicht gefunden werden kann, wird eine Exception geworfen. Das kannst du dir wie 'ne Art interne Nachricht vorstellen, auf der der Fehler beschrieben wird. Das Programm gibt diese Nachricht jetzt an verschiedene Ebenen weiter bis irgendwann jemand die Nachricht abfängt und den Fehler behandelt, z.B. in dem er einfach festlegt das eine andere Musik stattdessen gespielt werden soll. In der allerletzten, obersten Ebene wird die Exception immer abgefangen, eine Fehlermeldung ausgegeben und das Spiel beendet.
    Wenn jetzt innerhalb des Animationsladens irgendein Fehler auftritt, der außerhalb des Animationsladens aber behandelt wird, dann bleibt der long_running_process-Thread trotzdem am Leben. Dieser Prozess, sorgt aber im Hintergrund dafür, dass das Spiel nicht abstürzt. Wenn das Animationsladen zuende ist, soll er aber beendet werden, sonst verbraucht er nur unnütze Ressourcen. In der jetzigen Variante wird der Thread korrekt beendet, wenn eine Exception geschmissen wird.
    Man ist aber selten in der Lage eine Exception zu behandeln, und normalerweise macht man das auch sehr frühzeitig (z.B. direkt nach dem Laden der Musikdatei und nicht erst etliche Ebenen darüber). Daher ist das eher ein theoretisches Problem, was in der Praxis wohl selten auftauchen sollte.

  11. #11
    wow, sehr detailiert, habs auch mit verstanden.

    nochmal thx -KD-

    erm naja, jetzt ist aber echt mal schluss mit diesem thread xD
    habs ja immerhin hin bekommen ^^

    mfg
    Fox

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •