datarefから色を変えるのは簡単だが、コマンドだけだと1か0を取得できないので色を変える場合、変化を取得するのは難しい。そんなとき下の方法が使える。
この場合は実際のデータを取得している訳ではないので、動作を慎重に確認する必要がある。
論理演算子のnotを使うと条件を逆にすることができる
ここでは16行目と30行目、42行目で使っている。この動作は基本的にトグルになる。
初期設定でfalseにして、not で初期設定を逆にしてtrueにしている。
if文でボタンを押した時falseからtrueに反転されることになる。
3つのボタンをそれぞれ押した時、1つだけしか点灯しないように他の2つをfalseにしている。
これで、点灯しているボタン以外を押すと、点灯ボタンは消灯して、別の押したボタンが点灯することになる。つまり3つのボタンは必ず押したボタン1つしか点灯しないことになる。
demo_wnd = float_wnd_create(150, 100, 1, true) float_wnd_set_title(demo_wnd, "imgui Demo") float_wnd_set_imgui_builder(demo_wnd, "build_demo") float_wnd_set_onclose(demo_wnd, "closed_demo") makeGreen1 = false --初期はグレー makeGreen2 = false makeGreen3 = false function build_demo(wnd, x, y) -- 次の関数はボタンを作成します。注意!ボタン名をそれぞれ違う名前にしないと動作しない! if imgui.Button("Push Me1") then -- Button関数は、指定されたラベルでボタンを作成します。 ボタンが離された瞬間にtrueを返します。 --つまり、ifステートメントを使用して、ボタンの背後にあるアクションを実行する必要があるかどうかを確認します。 --ボタンを変数に切り替えましょう: makeGreen1 = not makeGreen1 --falseの否定になるのでtrueを返す(trueとfalseを繰り返す) makeGreen2 = false makeGreen3 = false end -- 変数を使用してテキストの色を変更します if makeGreen1 then --makeRedはtrueなのでグリーンを表示 imgui.DrawList_AddCircleFilled(85, 18, 8, 0xFF00FF00) -- グリーンの円を作成 else imgui.DrawList_AddCircleFilled(85, 18, 8, 0x50FFFFFF) -- グレーの円を作成 end -- 次の関数はボタンを作成します。 if imgui.Button("Push Me2") then makeGreen2 = not makeGreen2 makeGreen1 = false makeGreen3 = false end if makeGreen2 then --makeRedはtrueなのでグリーンを表示 imgui.DrawList_AddCircleFilled(85, 41, 8, 0xFF00FF00) -- グリーンの円を作成 else imgui.DrawList_AddCircleFilled(85, 41, 8, 0x50FFFFFF) -- グレーの円を作成 end -- 次の関数はボタンを作成します。 if imgui.Button("Push Me3") then makeGreen3 = not makeGreen3 makeGreen1 = false makeGreen2 = false end if makeGreen3 then --makeRedはtrueなのでグリーンを表示 imgui.DrawList_AddCircleFilled(85, 63, 8, 0xFF00FF00) -- グリーンの円を作成 else imgui.DrawList_AddCircleFilled(85, 63, 8, 0x50FFFFFF) -- グレーの円を作成 end end