我想用 LSL 制作一个射手,所以我想测量鼠标左键单击开始和结束之间的时间,以设置投掷速度。
我还想更新一个 gui(或至少显示文本Power: 55%
等),假设每增加 5%。
我怎样才能做到这一点?
我真的无法展示我所做的任何事情,因为我不太了解 LSL,所以我无法尝试任何事情。我能找到的最接近的是llTakeControls的这个页面,但我不确定如何使用它。
提前感谢您的帮助,
编辑
根据@BlindWanderer 的回答,我尝试对其进行修改(希望control()
在鼠标关闭时会重复调用它),但显然情况并非如此:
default
{
state_entry()
{
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
}
run_time_permissions(integer perm)
{
if(PERMISSION_TAKE_CONTROLS & perm)
{
llTakeControls(CONTROL_LBUTTON, TRUE, TRUE);
}
}
control(key id, integer level, integer edge)
{
integer start = level & edge;
integer end = ~level & edge;
integer held = level & ~edge;
integer untouched = ~(level | edge);
if(start & CONTROL_LBUTTON) {
llResetTime();
}
if(end & CONTROL_LBUTTON) {
llOwnerSay((string)llGetTime());
}
// --- My attempt to display the time peridoically
float timerval = llGetTime();
llOwnerSay((string)timerval); // this doesn t fire
if(llRound(timerval*100) % 5 == 0){
llOwnerSay((string)timerval); // this neither
}
}
}
我的第二次尝试(在意识到有一个名为 的变量之后held
),但我再次无法使其工作:/
default
{
state_entry()
{
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
}
run_time_permissions(integer perm)
{
if(PERMISSION_TAKE_CONTROLS & perm)
{
llTakeControls(CONTROL_LBUTTON, TRUE, TRUE);
}
}
control(key id, integer level, integer edge)
{
integer start = level & edge;
integer end = ~level & edge;
integer held = level & ~edge;
integer untouched = ~(level | edge);
if(start & CONTROL_LBUTTON) {
llResetTime();
}
if(end & CONTROL_LBUTTON) {
llOwnerSay((string)llGetTime());
}
if(held & CONTROL_LBUTTON){
llOwnerSay("check");
float timerval = llGetTime();
llOwnerSay((string)timerval); // this doesn t fire
if(llRound(timerval*100) % 5 == 0){
llOwnerSay((string)timerval); // this neither
}
}
}
}