Touch start
Looking for the current API? Open the touch_start reference →
Wiki description
Triggered by the start of agent clicking on task
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.
- The default behavior is: If you have a multi-prim object and the root has a touch_start handler AND one or more child prims has a touch_start handler, the root prim's handler will be called when it (the root) or a child without a handler is touched. If you touch a child prim that has a touch_start handler, it will receive the event and the root prim will not.
- This behavior can be configured with llPassTouches. After configuring a prim's touch-passing behavior you can delete the script that configured the prim.
- 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.
- Due to a known issue, if a resident is already touching a scripted object, touch_start runs only every other time that other residents touch it.
Examples
You can use index 0 through (
num_detected-1) with the various llDetected... functions to handle simultaneous touches at once.For most purposes, it's usually enough to handle just with the first toucher e.g. llDetectedKey(0). It is rare (but not impossible) for
num_detected to be greater than 1.default
{
touch_start(integer num_detected)
{
key avatarKey = llDetectedKey(0);
string avatarName = llDetectedName(0);
llInstantMessage(avatarKey, "Hello " + avatarName );
}
}This next example demonstrates detecting when the owner of the object clicks-and-holds on the object for 1 second in order perhaps to access a management menu or similar, Normal brief clicks are distinguished.
default
{
touch_start(integer num_detected)
{
llResetTime(); // Set llGetTime to 0
}
touch_end(integer num_detected)
{
// Check how much time elapsed since touch_start
if (llGetTime() <= 1.0)
{
// The user did a normal quick click on the object
// Execute actions for normal clicks...
}
else
{
// The owner has touched this object for longer than 1 second
// Execute some special feature such as issuing a management dialog...
}
}
}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. Add a touch_end handler and do the state change there. Changing state from within touch_start can cause the next occurrence of THIS touch_start code to be missed.
- On clicking a prim with touch event handlers, the following handlers are triggered: touch_start (on first contact), touch (during) and touch_end (as released).
See also: functions
See also: events
Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.