• 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.

kleines scripting problem eines anfängers

Ernesto Leonard

Neuer Nutzer
ich will ein script, welches beim draufklicken start und beim weiteren draufklicken stop sagt usw.
wollte das mit einer modulo anweisung (%) erledigen, aber irgendwie sagt das script nur "start"! es handelt sich wieder einmal um ein anfängerproblem, sorry dass ich euch mit solchen primitiven dingen belästige!


default
{

state_entry()
{
}
touch_start(integer klicks)
{
if (klicks % 2 == 1)
{
llShout(0, "start");

}
else
{
llShout(0, "stop");

}
}
}
 
Mit States
Code:
default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        state start;
    }
}

state start
{
    state_entry()
    {
        llSay(0, "Start");
    }

    touch_start(integer total_number)
    {
        state stop;
    }
}

state stop
{
    state_entry()
    {
        llSay(0, "Stop");
    }

    touch_start(integer total_number)
    {
        state start;
    }
}

Deine Modulo Lösung
Code:
integer klicks;

default
{
    state_entry()
    {
        klicks = 0;
    }

    touch_start(integer total_number)
    {
        klicks += 1;
        
        if( klicks % 2 )
            llSay( 0, "Start" );
        else
            llSay( 0, "Stop" );
            
    }
}
 
hier noch ne andere variante mit states.
(filosofische begründung: weil der zustand ist ja, dass etwas gestartet ist. und die Nachricht kommt im Zustandsübergang)

Code:
default 
{ 
    state_entry() 
    { 
    } 

    touch_start(integer total_number) 
    { 
        state started; 
    } 
} 

state started 
{ 
    state_entry() 
    { 
        llSay(0, "Start"); 
    } 

    touch_start(integer total_number) 
    { 
        state default; 
    }

    state_exit() 
    { 
        llSay(0, "Stop"); 
    } 
}
 
hier die platzsparer nummer lol
Code:
integer c=0; 
default 
{ 
    touch_start(integer total_number) 
    { 
        if(c) 
            llSay( 0, "Stop" ); 
        else 
            llSay( 0, "Start" );   
    } 
}
 
Code:
integer c=0;
default
{
    touch_start(integer total_number)
    {
        c = !c;
        if(c)
            llSay( 0, "Stop" );
        else
            llSay( 0, "Start" );   
    }
}

Hey Elvis, hab mal den Wechsel in c noch dazugesetzt, nu tuts auch.

/me braucht mehr Taschentücher *hust*

MfG
Hannibal
 
Du sprichst mir aus der Seele. So aus dem Stehgreif fallen mir auch 5 weitere ein. Aber wie du sagst, kommt immer darauf an was man machen möchte.
 
Hannibal Hudson schrieb:
Code:
integer c=0;
default
{
    touch_start(integer total_number)
    {
        c = !c;
        if(c)
            llSay( 0, "Stop" );
        else
            llSay( 0, "Start" );   
    }
}

Hey Elvis, hab mal den Wechsel in c noch dazugesetzt, nu tuts auch.

/me braucht mehr Taschentücher *hust*

MfG
Hannibal


ja. ok

ich hatte es auch nich getestet
 
wunderbar, alle lösungen haben etwas an sich!

ich würde das script gerne erweitern:

momentan siehts so aus, dass wenn man einmal draufklickt, dass obekt start sagt bzw beim zweiten klick das objet stop sagt. ich würde gerne überprüfen ob gklickt wurde und wenn nicht geklickt wird, soll das objekt sagen wir einmal pro sekunde ganz was anderes sagen - zb "nicht geklickt".

dies soll aber nur geschehen wenn der 1., 3., 5., usw klick erfolgt ist!
ich bin auf lösungen gespannt
 
Hi Ernesto,
vorneweg erstmal:

Bitte Quelltext IMMER in code-Tags posten!

Ich hätte das auch mit modulo realisiert und hab deinen code erweitert.
Ich war zu faul deinen vorhanden code zu formatieren daher ist das hier auch unleserlich.


Code:
integer count = 0;


default
{

state_entry()
{
  
}
touch_start(integer klicks)

{
++count;  
if (count % 2 == 1)
{

llShout(0, "start");
state time;
}
else
{
llShout(0, "stop");

}
}
}
state time

{
state_entry()
{
llSetTimerEvent(1);
}   

timer() 
{
llSay(0,"nicht geklickt");  
}
touch_start(integer klicks)

{
llShout(0, "stop");
++count;
state default;


}
}

Gruß Hoerman
 

Users who are viewing this thread

Zurück
Oben Unten