Touch end: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Fred Gandt (talk | contribs)
same again
Nexii Malthus (talk | contribs)
**
 
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Template:Issues/SVC-3017}}{{LSL_Event|event_id=4|event_delay|event=touch_end
{{LSL_Event|event_id=4|event_delay|event=touch_end
|p1_type=integer|p1_name=num_detected|p1_desc
|p1_type=integer|p1_name=num_detected|p1_desc
|event_desc=Triggered when agent stops clicking on task
|event_desc=Triggered when agent stops clicking on task
|constants
|constants
|spec
|spec
|caveats
|caveats=* If a prim [[face]] has [[Navigating Shared Media|Shared Media]] enabled and the avatar's viewer supports this feature, LSL scripts will not detect touches on that face. Touches from older clients will be detected.
|examples=You can use numbers 0 through num_detected - 1 to get detected agent keys:
* Rigged mesh attachments do not support touch events, this is because you can steer your avatar/camera by click dragging your avatar body which is what the rigged mesh replaces. The only way to get a touch event on a rigged mesh attachment is via the right click context menu and clicking the "Touch" button.
<lsl>float t;
|examples=You can use numbers 0 through num_detected - 1 with the various llDetected... functions to get detected agent keys etc. For most purposes, it is adequate to bother only with the first detected toucher e.g. llDetectedKey(0).  It is rare (but not impossible) for num_detected to be other than 1.
<source lang="lsl2">


default
default
Line 12: Line 13:
     touch_start(integer num_detected)
     touch_start(integer num_detected)
     {
     {
         t = llGetTime();
         llResetTime();
     }
     }
     touch_end(integer num_detected)
     touch_end(integer num_detected)
     {
     {
         llOwnerSay((string)(llGetTime() - t) + " seconds between touch_start and touch_end");
         llInstantMessage( llDetectedKey(0), "You held the mouse button down for " + (string) llGetTime() + " seconds");
     }
     }
}</lsl><lsl>// A minor concern to take note of...
}</source>
 
|notes=*If using a touch to change states be careful about the touch_ event order. '''The best advice is NOT to do state changes from within touch_start.''' Use touch_end and do the state change there. Changing state from within touch_start can cause the next occurrence of THAT touch_start code to be missed.
 
*On clicking a prim with touch events we trigger touch_start (on first contact), touch (during) and touch_end (as released).  


default
{
    touch_start(integer nd)
    {
        llSay(0, "You just started touching me so I'm going to the other state...");
        state other;
    }
}
state other
{
    touch_end(integer nd)
    {
        llSay(0, "The touch that brought you here just ended so I'm off...");
        state default;
    }
}</lsl>
|helpers
|helpers
|also_header
|also_header
Line 51: Line 40:
|cat2=Detected
|cat2=Detected
|cat3=Grab
|cat3=Grab
|cat4}}
|cat4=Passable
}}

Latest revision as of 05:17, 26 August 2025

Description

Event: touch_end( integer num_detected ){ ; }

Triggered when agent stops clicking on task

• integer num_detected

Caveats

  • If a prim face has Shared Media enabled and the avatar's viewer supports this feature, LSL scripts will not detect touches on that face. Touches from older clients will be detected.
  • Rigged mesh attachments do not support touch events, this is because you can steer your avatar/camera by click dragging your avatar body which is what the rigged mesh replaces. The only way to get a touch event on a rigged mesh attachment is via the right click context menu and clicking the "Touch" button.


Examples

You can use numbers 0 through num_detected - 1 with the various llDetected... functions to get detected agent keys etc. For most purposes, it is adequate to bother only with the first detected toucher e.g. llDetectedKey(0). It is rare (but not impossible) for num_detected to be other than 1.

default
{
    touch_start(integer num_detected)
    {
        llResetTime();
    }
    touch_end(integer num_detected)
    {
        llInstantMessage( llDetectedKey(0), "You held the mouse button down for " + (string) llGetTime() + " seconds");
    }
}

Notes

  • If using a touch to change states be careful about the touch_ event order. The best advice is NOT to do state changes from within touch_start. Use touch_end and do the state change there. Changing state from within touch_start can cause the next occurrence of THAT touch_start code to be missed.
  • On clicking a prim with touch events we trigger touch_start (on first contact), touch (during) and touch_end (as released).

See Also

Events

•  touch_start
•  touch

Functions

•  llPassTouches

Deep Notes

Signature

event void touch_end( integer num_detected );