連続 – ボタンを押している間、動作し続ける – FlyWithLua

2023年4月4日

例えば、矢印キーを押している間、X-Planeの画面が移動するような場合、ボタンにそれを設定するには。
command_onse()という関数を使用するが、これはクリックし続けても1回しか動作しない。押している間連続で動作する方法である。

以下のスクリプトはcommand_onse()を連続して発生させるものである。
makeRedは初期設定では緑を発生する変数で、ボタンを押すとmakeRedがnot makeRedでfalseからtrueになる。つまり反転するので、その下のif makeRed thenで「Some Text」の色が交互に変化することになる。

今回の課題である連続発生は「imgui.IsItemActive()」関数により常にfalseになるのでクリックし続けるとcommand_once()を連続して発生させることが出来るということである。
「Click and hold」ボタンを押し続けると上の「

今回の課題である連続発生は「imgui.IsItemActive()」関数により常にfalseになるのでクリックし続けるとcommand_once()を連続して発生させることが出来るということである。
「Click and hold」ボタンを押し続けると上の「Some Text」が点滅しているのがわかるようにcommand_once()を常に発生させて連続させているのが理解できる。

普段のボタンはif文から始まるが、この場合はボタンを作成してその後に「if imgui.IsItemActive() then」を記述し実行するというのが違うところ。

makeRed = false

function build_demo(wnd, x, y)
    if imgui.Button("Push Me") then
        -- Button 関数は、指定されたラベルの付いたボタンを作成します。 ボタンが離された瞬間に true を返します。
        -- つまり、if ステートメントを使用して、ボタンの背後にあるアクションを実行する必要があるかどうかを確認します。 ボタンに変数を切り替えさせましょう。
        makeRed = not makeRed     --これでfalseとtrueを交互に変化させ、下の色を変化させることが出来る。
    end

    -- 変数を使用してテキストの色を変更します
    if makeRed then     --つまりmakeRedがfalseの場合以下を実行
    	--Push Meボタンをクリックしtrueになったら赤色
        imgui.PushStyleColor(imgui.constant.Col.Text, 0xFF0000FF)	--赤色
    else
        imgui.PushStyleColor(imgui.constant.Col.Text, 0xFF00FF00)	--黄緑
    end

    imgui.TextUnformatted("Some Text")
    imgui.PopStyleColor()

    -- ボタンがクリックされている間中アクションをトリガーする場合:
    imgui.Button("Click and hold")
    if imgui.IsItemActive() then                --imgui.IsItemActive()は常にfalseを返します
        makeRed = not makeRed
        command_once("sim/general/zoom_in")     --このコマンドでボタンを押し続けることで実行する。
    end
end

function closed_demo(wnd)
    -- This function is called when the user closes the window. Drawing or calling imgui
    -- functions is not allowed in this function as the window is already destroyed.
end