Johanna Burnstein
Freund/in des Forums
Mahlzeit,
Ich hab schon öfters Objekte/Scripte gesehen die auf einen Doppelklick reagiert haben.
Nun hab ich mich gefragt: "Wie machen die das?"
Auswerten des an touch (und/oder touch_start) übergebenen Parameter kann es ja nicht sein, oder? (Da kann man so wild auf das Objekt klicken wie man will, man wird immer einen Event pro Klick erzeugen.)
Jetzt ist mir eine Lösung per Timer eingefallen. Sähe grob so aus:
Das funktioniert auch ganz gut. Nur frage ich mich aber ob es noch andere Techniken gibt und wie die aussähen.
Gruß,
Jo'
Ich hab schon öfters Objekte/Scripte gesehen die auf einen Doppelklick reagiert haben.
Nun hab ich mich gefragt: "Wie machen die das?"
Auswerten des an touch (und/oder touch_start) übergebenen Parameter kann es ja nicht sein, oder? (Da kann man so wild auf das Objekt klicken wie man will, man wird immer einen Event pro Klick erzeugen.)
Jetzt ist mir eine Lösung per Timer eingefallen. Sähe grob so aus:
Code:
float DBLCLK_TIMEOUT = 0.3; // timeout to detect double clicks
integer g_bDoubleClick = FALSE; // global flag, true if we're waiting for a second click
default
{
state_entry() {
}
touch_start(integer nAgents) {
if(g_bDoubleClick) {
// clear double click timeout
// to prevent multiple (>2) clicks beeing processed too
g_bDoubleClick = FALSE;
llSetTimerEvent(0.0);
// * act on double click *
llOwnerSay("Double Click");
} else {
// start double click timeout
g_bDoubleClick = TRUE;
llSetTimerEvent(DBLCLK_TIMEOUT);
}
}
timer() {
// clear double click timeout
g_bDoubleClick = FALSE;
llSetTimerEvent(0.0);
// * act on normal click *
llOwnerSay("Normal Click");
}
}
Das funktioniert auch ganz gut. Nur frage ich mich aber ob es noch andere Techniken gibt und wie die aussähen.
Gruß,
Jo'