1

LSLでシューターを作りたいので、マウスの左クリックの開始から終了までの時間を測定して、スロー速度を設定します。

また、GUI を更新したい (または少なくともテキストPower: 55%などを表示したい) としましょう。

どうやってやるの?

私は 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
        }

    }
}

私の2回目の試み( という変数があることに気付いた後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
            }
        }




    }
}
4

1 に答える 1

1

例を変更する方法を説明するよりも、llTakeControls から例を変更する方が迅速でした。これは、時間を取得するための迅速で汚れた方法です。

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());
        }
    }
}
于 2016-05-01T16:29:43.250 に答える