UI-Hauptmenü "Infinitte loop detectet"

  • Hi zusammen.


    Ich versuche mich gerade daran meine Menüs mal anständig anzusteuern. Ist ja eh so ein Hassthema bei mir, also Zeit sich mal darum zu kümmern.


    Ich habe folgenden Aufbau. Ich habe das Hauptmenü, mit einem Hintergrund, Überschrift und einem Wigetswitcher.

    Auf dem Widgetswitcher Index 0 ist ein Menü-UMG mit den Buttons "Neues Spiel", "Spiel laden", "Einstellungen" und Beenden.

    Dann habe ich bisher noch das Einstellungsmenü auf Index 1, dies hat eben halöööt die Untermenüpunkte für Grafik, Audio und Spiel. Dann halt noch Zurücksettzen, Anwenden und Zurück.


    Ich habe dann eine Gameinstanz erstellt, welche in dem Level das Hauptmenü darstellt. Das funktioniert.


    Wenn ich nun den Button "Einstellungen klicke, wird folgendes Event aufgerufen.



    Das funktioniert ebenfalls so weit.


    Wenn ich nun aber auf "Zurück" klicke wird folgendes Event aufgerufen.



    Danach kommt dann halt direkt die Fehlermeldung " "Infinitte loop detectet".


    Dies wundert mich ein wenig, denn es wird ja schlichtweg nichts anderes gemacht, als den Index vom Widgetswitch zu setzen. Es wird kein Code oder Loop oder was auch immer ausgeführt. Auch das doppelte Laden des Hauptmenüs habe ich verhindert. Das Menü wird ja auch nicht entladen oder zerstört oder was auch immer, denn es wird ja immer nur der Wigetswitcherindex geändert.


    Also wo soll dieser verdammte "Infinitte loop detectet" herkommen. Ich weiß momentan nicht, wo mein Denkfehler ist, bzw. wo ich etwas übersehen habe.

  • Hmmm. Plötzlich funktioniert es ohne Probleme.. Was irgendwie merkwürdig ist, da ich nichts, und damit meine ich absolut nichts, daran geändert habe.


    Sobald ich rausgefunden habe, warum das so war, falls das überhaupt möglich ist, werde ich den Grund schreiben, falls jemand in dieselbe Falle tappen sollte.

  • Eigentlich nicht. Es ist wirklich das Einzige was die Codes machen, halt den Index vom Widhgetswitcher ändern. Absolut nichts sonst.


    Und die Fehlermeldung bedeutet ja Dauerschleife. Normalerweise ist das, in normalem Code gesprochen irgendetwas wie...

    Code
     while(1)
    {
    }

    Ohne das irgendein Code enthalten ist diese Schleife zu durchbrechen.


    Aber normalerweise sind Buttonevents ja keine Schleifen, es sind bedingte Aufrufe. Also, selbst wenn ich das Optionsmenü aufrufe und gleich danach zurück, es ist ja keine Schleife im herkömmlichen Sinne. es ist nur ein Aufruf hin und einer zurück.


    Von daher kommt mir die Fehlermeldung absolut unlogisch vor.

  • Ich hatte auch eher daran gedacht, dass wenn du z.B. auf den Button für ShowSettings klickst, und dann wieder auf den für "Zurück", dieses Event, ggf. den Wert einer Variable verändert, und dann wiederum das andere. Den Beide Methoden teilen sich ja "Main Menu " bzw. "set main menue". Hätte jetzt geraten, dass das vllt. daran liegt, aber wenn du sagst, dass du vor und nach den Methodenaufrufen nichts stehen hast, wird es das wohl nicht seinl.

    Look behind you! A three-headed monkey!

  • Ne, nicht ganz. SWT Main Menü ist der Wigetswitch, den ich halt so benannt habe. Und von dem muss ich halt den Index umstellen. Und Main Menu ist halt die Referenz auf das MainMenuWidget in der dieser Switch vorkommt.


    Von daher greife ich also auf die Referenz des Widgets zu, diese habe ich vorher mit Cast To gesetzt, und über diese Referenz dann gezielt auf den Switch, bzw. den Index vom Switch.


    Zumindest in meinem Kopf klingt das erstmal richtig so.

  • Also ich hab den Aufbau mal bei mir nachgebaut so gut es ging, aber das funktioniert alles wie es soll. Vllt. war das wirklich einfach ein Fehler der Engine, und beim kompilieren ist einmal was schiefgelaufen.


    Hast du diesen Fehler denn öfter bekommen, oder nur einmal?


    Die letzten Ideen die ich heute noch aus meinem Schädel krieg, ist, dass das Main Menu Widget mit einem anderen kollidiert, oder es beim Input irgendwelche Probleme gibt (insofern du den links-Klick der Maus ein weiteres mal zugeordnet hast).

    Look behind you! A three-headed monkey!

  • Also ich hab den Aufbau mal bei mir nachgebaut so gut es ging, aber das funktioniert alles wie es soll. Vllt. war das wirklich einfach ein Fehler der Engine, und beim kompilieren ist einmal was schiefgelaufen.

    Ich habe den Fehler ständig bekommen. Vor dem Compilieren, nach dem Compilieren, war absolut egal. Dann habe ich irgendwo etwas weiter gemacht, was überhaupt nichts mit dem Menü zu tun hatte, weil frustriert, und dann ging es plötzlich.


    Vielleicht sollte ich es einfach unter der Rubrik "Ist halt so" abspeichern. Weil seitdem kam der Fehler auch nie wieder. Zumindest bis jetzt, denn jetzt mache ich Feierabend. Mal sehen, wie es ausschaut, wenn ich das Projekt wieder öffne. :P

  • Weil das Ganze in der Gameinstanz aufgerufen wird. Dadurch brauche ich die Events dann nur mit dem Button aufrufen.

    Mach ich auch so.
    Habe vor einer Woche mit einem Pause Menü rumprobiert. So wie ich es benutzen möchte und brauche ist es auf diese Weise viel sinnvoller und cleaner vom Aufbau her.
    Habe vorher viele Möglichkeiten rumprobiert. Dauerte bis ich darauf kam.

  • Weil das Ganze in der Gameinstanz aufgerufen wird. Dadurch brauche ich die Events dann nur mit dem Button aufrufen.


    Ist zwar alles noch recht experimentell, aber ich erhoffe mir damit eine noch bessere Trennung von Code und Design.

    Interessante Möglichkeit, aber wenn ich deinen Code warten müsste wäre das die letzte stelle an der ich suchen würde.


    Was spricht gegen eine einfache Funktion?

    Wenn du sie nicht im Widget haben möchtest lege eine FunctionLibrary an oder erstelle eine Widget-Klasse mit den entsprechenden Methoden von der dann geerbt wird.

    Dann kannst du es an so vielen Stellen benutzen wie du möchtest.

  • Was spricht gegen eine einfache Funktion?

    Wenn du sie nicht im Widget haben möchtest lege eine FunctionLibrary an oder erstelle eine Widget-Klasse mit den entsprechenden Methoden von der dann geerbt wird.

    Wie gesagt, das Ganze ist eher experimentell zu sehen. Eben halt Möglichkeiten, Vor- und Nachteile ausloten, und am Ende vielleicht die Vorteile aus mehreren Möglichkeiten nutzen zu können und die Nachteile so weit wie möglich abzuschaffen.


    Man will sich in seinem Wissen ja schließlich erweitern.


    Und ich muss sagen, bisher funktioniert das Ganze relativ gut, außer vielleicht das eingangs erwähnte Problem, woran das auch immer gelegen haben mag.