Problem beim Script mit Sensor

    • Script Fragen

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

    • Problem beim Script mit Sensor

      Hallo,

      ich habe ein Problem. Ich weiß nicht, warum der Script in der While Schleife hängen bleibt, wenn ich den Sensor Bereich verlasse.
      Bist zur While Schleife ändert sich die entity_list_out ja nicht und läuft in die While Schleife ein, darin wird entity_list_out durch das Clear gelöscht (.count wieder auf 0)
      Dann sollte doch die Liste neu befüllt werden, aber wenn ich mich nicht im Sensor aufhalte. sollte der entity_list_out.Count auf 0 sein.
      Wo ist da das Problem. Muss man dn Sensor irgendwie zurücksetzen oder wo ist das Problem?

      C#-Quellcode

      1. List<MyDetectedEntityInfo> entity_list_out = new List<MyDetectedEntityInfo>();
      2. var sensor_out = GridTerminalSystem.GetBlockWithName("Sensor CC out") as IMySensorBlock;
      3. sensor_out.DetectedEntities(entity_list_out);
      4. if (entity_list_out.Count != 0)
      5. {
      6. //... Code der ausgeführt wird ...
      7. while (entity_list_out.Count != 0)
      8. {
      9. entity_list_out.Clear();
      10. sensor_out.DetectedEntities(entity_list_out);
      11. }
      12. //... Code der ausgeführt wird ...
      13. }
      Alles anzeigen
      --
      Rodiboki
    • Boah, da fragt er Sachen.

      Unabhängig vom Scripting erstmal...

      Ist es nicht so, dass der Sensor erst beim Überschreiten der Grenze tatsächlich triggert?
      Zwar wird - wenn man sich das Sensorfeld auf dem HUD anzeigen lässt - dieses immer schön grün und rot angezeit je nach Status,
      aber der Sensor dürfte immer erst dann auslösen, wenn die Grenze des Sensorfeldes passiert wird - egal in welche Richtung.
      Hörbar an dem Triggersound, den die Dinger von sich geben.

      Da könnte der Hund vielleicht begraben sein... (nur so ein Gedanke)
    • Deine While-Schleife sieht wie Sensor-Polling aus. Macht hier keinen Sinn, dein Programm läuft innerhalb eines einzelnen Spiel-Frames (Sekundenbruchteile) wo sich keine Sensor-Werte ändern.
      Solange dein Programm läuft steht das ganze Spiel still daher wird deine while-schleife nach zu vielen Durchläufen zwangsabgebrochen.
      Dein Skript bekommt Laufzeit innerhalb einer Game-Loop und wenn das spiel grad mit 40fps läuft hat man nur 25 Millisekunden für ALLE Berechungen im Spiel. Für ALLE Skripte, Bohrer, Raumschiffe etc...

      In deine while wird gesprungen wenn der Wert nicht null war. wenn du den clearst und in der nächsten Zeile den alten wert zurückliest ist er wieder nicht Null ---> Endlos-Schleife --> Zwangsabbruch --> ProgBlock gesperrt bis recompile (weil der Bug behoben werden soll damit der Server nicht unglücklich wird)

      Den Sensor pollen kann man wenn sich der Prog Block über einen Timer selbst aufruft über einen Timer Block oder mit sehr viel schnellerem Intervall über den Prog Block eigenen Timer:
      Runtime.UpdateFrequency

      Dieser Beitrag wurde bereits 56 mal editiert, zuletzt von shadow_con ()