Variablesalad

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

  • Variablesalad

    Die Punkte eröhen sich um 20 pro step

    Bei einem bestimmten SCore soll er eine Variable speichern, die gerade verfügbar ist und zwar:

    in global.maxfps1000 wird die momentane FPS gespeichert, und zwar in dem Moment, in dem der Score 1000 ist.
    Zu dem soll die CPU Last gespeichert werden, dies inglobal.cpu1000 also auh wenn score 1000 ist.

    So die CPU Last kommt über eine DLL, das Problem, sie aktualisiert sehr schnell, und oft mit Werten die auf 0 gehen und das zu 80% sodass am Ende Last 0 gepeichert wird. Da dachte ich mir, speichere nur die Variable, wenn die Last NICHT 0 ist.

    global.usagevar1 ist die Variable, die immer die aktuelle Last beinhaltet

    Quellcode

    1. if score = 1000 // wenn score 1000 ist, dann
    2. {
    3. global.maxfps1000 = fps // speicher die aktuelle FPS in maxfps1000
    4. global.cpu1000 = global.usagevar1 // speicher die CPU Last in cpu1000
    5. while(global.cpu1000 = 0) // falls nun cpu1000 = 0, dann
    6. {
    7. global.cpu1000 = global.usagevar1 // suche solange eine neue, die nicht 0 ist
    8. }
    9. }
    Alles anzeigen


    score = Punkte
    global.cpu1000 = CPU Last bei Score 1000
    global.maxfps1000 = Die FPS bei score 1000
    global.usagevar1 = Die LAst eingerechnet von einer DLL


    Das Problem: Das ganze hängt sich auf und bleibt stehen, ich schätze eine Endlosschleife...aber warum ?
    Projekte:

    Interesse ? PM mir ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von t3mp3st ()

  • Spielen wir mal Game Maker:

    GML-Quellcode

    1. global.cpu1000 = global.usagevar1

    global.cpu1000 wird auf global.usagevar1 gesetzt, die 0 ist.

    GML-Quellcode

    1. while(global.cpu1000 = 0)
    2. {
    3. global.cpu1000 = global.usagevar1
    4. }


    Während global.cpu1000 0 ist wird global.cpu1000 auf global.usagevar gesetzt. Das ist aber 0, deswegen wird global.cpu1000 auf global.usagevar gesetzt. Das ist aber 0, deswegen wird global.cpu1000 auf global.usagevar gesetzt. Das ist aber 0, deswegen wird global.cpu1000 auf global.usagevar gesetzt. usw.

    Beide Variablen ändern ihren Wert in der Schleife nicht. Da aber dann bei 0 sind läuft die Schleife so lange, bis sie sich ändern. Aber wenn sie sich in der Schleife nicht ändern, können sie sich nicht mehr ändern. Schon wird die Angelegenheit endlos.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Ähm, ok aber du musst davon ausgehen, dass die Variable global.usagevar1 von einem anderen Objekt pro step generiert wird. Somit wartet diese Objekt nur darauf, dass das andere eine Variable nicht gleich 0 ausspukt.

    global.usagevar1 ist NICHT immer 0, nur in manchen Fällen, liegt an der blöden CPU DLL die ich habe.

    Somit dürfte keine Endlosschleife kommen, denn die Var. ändert sich ständig...


    Hatte schon die gm-d CPU DLL von euch benutzt, die ist aber zu langsam und "freezt" das Spiel für einige Sekunde, meine nicht, allerdings hat diese zu viele 0 Lasten drin.


    *EDIT*

    Diese benutz ich momentan:
    gm.hobbl.com/dll.php?name=cpuusage

    Und ich bekomms einfach nicht gebacken, dass ich jede 500 Punkte im Abstand also 1000,1500,2000 bis 9000 die einzelnen Lasten des CPU's in einzelne Variablen zu speichern.

    Sodass ich eben zu jeder 500+ Objects eine Variable mit der damaligen Last habe (bis 9000)
    Projekte:

    Interesse ? PM mir ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von t3mp3st ()

  • Falsch. Alles wird nacheinander abgearbeitet, echtes gleichzeitiges Verarbeiten von verschiedenen Prozessen ist auf einem Ein-Prozessor System rein technisch nicht möglich. Auch der Game Maker arbeitet alles nacheinander ab, auch die Step Events der Objekte einer nach dem anderen. Und wenn nun bei den eine While Schleife ist wird eben nichts anderes gemacht bis dieses Schleife fertig abgearbeitet ist. Erst danach gehts weiter. Du müsstest den Dll Aufruf dann in die Schleife mit reinpacken.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • So war es ja auch gedacht, mache erst weiter, wenn du ne andere Variable ausser 0 hast, und diese wird 30 mal pro sekunde neu generiert....somit kann das keinesfalls längers als ein paar Bruchteile einer Sekunde dauern...

    Schau dir die DLL einfach mal an, Link habe ich eins drüber gepostet.

    Einfach die Lasten in verschiedenen Zeiten speichern...
    Projekte:

    Interesse ? PM mir ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von t3mp3st ()

  • Du verstehst mich nicht. Das ganze Game Maker Spiel macht während der Schleife nichts anderes als die Schleife ausführen. Also wird die Dll nicht abgefragt. Das einzige, was in deinem Spiel passiert, solange der Wert 0 ist, ist dass ständig eine Variable auf 0 gesetzt wird. Die Events laufen nicht gleichzeitig sondern nacheinander!!
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Original von t3mp3st
    So war es ja auch gedacht, mache erst weiter, wenn du ne andere VAriable ausser 0 hast, und diese wird 30 mal pro sekunde neu generiert....somit kann das keinesfalls längers als ein paar bruchteile einer sekunde dauern...

    Schau dir die DLL einfach mal an, Link habe ich eins drüber gepostet.

    Einfach die Lasten in verschiedenen Zeiten speichern...
    Nein, genau das passiert nicht.^^

    Eine While schleife wird komplett in jedem Step neu durchgearbeitet.
    Sprich: Solange die Bedingung noch erfüllt wird, wird die Schleife immer wieder ausgeführt.
    ALLES n EINEM Step.

    Sprich: Solange die Schleife noch läuft kann NICHTS anderes passieren, weil der nächste Step erst garnicht eintreten kann.

    Edit: Mist zu spät.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Langsam wirds mir klar... hmm in Delphi hatte das immer funktioniert,.... also müsste ich in dieser Whileschleife die DLL abfragen...hmm ich schau mal....


    *EDIT*

    OK das funtzt...

    Vielen dank für den Tipp, habs nun geblickt ;)

    Quellcode

    1. if score = 1000
    2. {
    3. global.maxfps1000 = fps
    4. global.cpu1000 = global.usagevar1
    5. while(global.cpu1000 = 0)
    6. {
    7. global.usagevar1 = CPU_GetSystemUsage ();
    8. global.cpu1000 = global.usagevar1
    9. }
    10. }
    Alles anzeigen
    Projekte:

    Interesse ? PM mir ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von t3mp3st ()

  • Benutzer online 1

    1 Besucher