• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Warum macht man so etwas?

Daemonika Nightfire

Forumsgott/göttin
hi,

im folgenden Beispiel handelt es sich lediglich um einen simplen Lichtschalter der eigentlich nichts anderes macht als eine Kerze an und aus zu schalten.
Code:
//globale variable:
integer giLighted = TRUE;

//--------------------------

    touch_start(integer iNumberTouching)
    {
        integer i = 0;
        do
        {
            if(giLighted)
            {
                Smoke();
                giLighted = FALSE;                                    
            }
            else
            {
                Flame();
                giLighted = TRUE;                                     
            }
            ++i;
        }
        while (i < iNumberTouching);
    }

Ich verstehe den Sinn dieser Schleife nicht!

Wenn ich einen Schalter erstelle, sieht das folgendermassen aus:
Code:
//globale variable:
integer status = FALSE; 

//--------------------------

    touch_start(integer num)
    {
        if(status == TRUE)
        {
            status = FALSE;
            Smoke();                                  
        }
        else if(status == FALSE)
        {
            status = TRUE;
            Flame();                                   
        }
    }

Was sagt ihr dazu?

LG
Dae
 
Rein theoretisch gibt es die Möglichkeit das ein Event mehrere touch_starts verarbeitet. Das Zeitfenster in dem
verschiedene Avatare den Prim klicken können ist allerdings ziemlich klein, wenn es den überhaupt besteht.
Ich hab 2007/08 mal versucht mit mehrenen Avas nen Event mit mehreren Touch_starts zu erzeugen. Ist mir
damals nicht gelungen. Ergo kann man für alle normalen Anwendungen num getrost ignorieren.

Und wenn es dann in 100 Jahren einmal vorkommt das ein touch verloren geht, das kann man auf den
Hardwarehersteller der Maus schieben oder auf Merkel :D

bis denne
Jan
 
In dem speziellen Fall ist es völlig sinnlos.

Ich hatte mal ein Spiel gebastelt, bei dem die drei ersten Toucher ins Folgespiel eingeladen wurden, da hatte ich sowas auch genutzt, aber später auch wieder gelöscht, da die Funktion selbst ziemlich schnell auch mit (0) eine Liste mit 3 Keys erstellt.
 
hi,

Ich verstehe den Sinn dieser Schleife nicht!

touch_start(integer iNumberTouching) kann wie schon erwähnt mehrere gleichzeitige Berührungen erkennen.

http://wiki.secondlife.com/wiki/Touch_start schrieb:
It is rare (but not impossible) for num_detected to be other than 1.

Das liegt daran, dass Scripts nicht kontinuierlich arbeiten, sondern immer in Intervallen von wenigen Mikrosekunden. Der Server läuft mit 45 FPS und pro Frame und Script können nicht mehr als 2 Events abgearbeitet werden, meist wird aber nur 1 Event verarbeitet. So dass man eben meist oft 1/45s = 22ms Zwischen den Event-Ticks hat. (Deswegen machen Timer mit weniger als 0.02 oder 0.01 Sekunden auch keinen Sinn in SL...) Kommen dann zwischen zwei dieser Event-Intervalle eben mehrere gleichzeitige touches rein, dann kann es also auch mal sein, dass z.B. in einem Club mit 30+ Leuten plötzlich 2+Toucher registiert werden. Wenn sie es zufällig schaffen gleichzeitig innerhalb von 22ms zu klicken. Das Problem daran ist: So ein Ereignis bewusst herbei zu führen dürfte nicht ganz einfach sein, nicht zuletzt weil eben jeder User eine andere Latenz zum Server hat, von 10ms wenn man direkt in der Nähe sitzt bis über 250ms wenn man in Europa sitzt. Und leider gibt es wohl keine Möglichkeit diese User-Server Latenz per LSL-Script zu messen um das irgendwie auszugleichen. (Es gibt keinen "Ping" in LSL).

Bei deinem unteren Schalter wird die Kerze in diesem Fall jedenfalls einfach an oder aus geschaltet, egal wie viele "gleichzeitig" in diesem Tick den Schalter drücken. Bei der Schleife oben wird jeder Touch innerhalb des Ticks ausgewertet um an oder aus zu schalten. Bei einer Kerze macht das natürlich wenig Sinn, mit der Schleife und mehreren Touchern flackert die Kerze wohl bisschen. Und eventuell tut sich bei einem Doppeltouch auch überhaupt nichts, weil die Kerze aus ist ehe die entsprechenden Funktionen für Rauch und Leuchten abgearbeitet wurden..Scripte Ticken wie gesagt.
Hier ist die Schleife sogar kontraproduktiv - beide wollen ja die Kerze an/aus schalten beim Klicken.

Möchte man aber z.B. keine Kerze schalten, sondern den Touch irgendwie anders verarbeiten (etwa Klick=Damage in einem schnellen Spiel oder ähnlichem), dann macht so eine Konstruktion mit Schleife, die wirklich jeden Touch auswertet, eventuell Sinn. Und ist zumindest "sauber" programmiert, weil damit keine Touch-Ereignisse unter den Tisch fallen. Und ich vermute einfach mal, dass da per Copy&Paste irgendwelcher vorhandene Code in die Kerze eingebaut worden war.
 
Vielen Dank,

das habe ich mir auch schon gedacht, das es fuer so eine Funktion Anwendungsgebiete geben mag, wobei mir allerdings nichts dazu einfiel, wo das noetig waere.
Fuer eine Kerze, die man nur an/aus schalten will, halte ich das allerdings auch fuer quatsch.

Und Shirley, du hast richtig vermutet, diese Funktion stammt tatsaechlich aus einem copy/paste Konstrukt, bei dem es im Zusammenhang mit einem llSleep und einem zweiten Script regelmaessig gesponnen hatte.

Nachtrag:
Copy/paste Scripte kann man gaaaanz leicht daran erkennen, wenn man den ganzen Code selektiert. Wenn dann hinter den Befehlen Ellen lange Leerschritte auftauchen, kann man zu ueber 90% davon ausgehen, das es von irgend einer dubiosen Webseite stammt.
Ebenfalls verraeterisch sind die wechselnden Formate bzw. unterschiedlichen Schreibstiele innerhalb eines Scripts.

LG
Dae
 
Zuletzt bearbeitet:

Users who are viewing this thread

Zurück
Oben Unten