時間を使う方法もいくつかある。
os.clock()を使う
簡単に実行してみる。以下はABCという文字をX-Plane内の下のほうに表示し、5秒たったら消す。
local starting_time = os.clock() function Text_draw() if os.clock() < starting_time + 5 then --os.clock()がstarting_timeより小さい間は以下を実行 draw_string( 100, 100, "ABC", 0, 1, 0) end end do_every_draw("Text_draw()")
逆に5秒たったら表示する場合は「<」を「>」にすればいいことになる。遅延表示になる。
時間で消えるQNHバブル表示
更にQNHの設定がおかしい場合は、下の画像以外にもう一つバブルが表示されそのバブルをクリックするとQNHをちゃんと設定するようになっている。そのバブルはQNHが問題ないなら表示されない。これはクリックするまで消えない。
以下は上のQNH設定の上にバブルウインドウが表示され、これが時間(ここでは10秒)が来たら消えるという仕掛けになっている。
チョット複雑だが時間の遅延というのは結構使う可能性が高い。
DataRef("QNH_Pilot", "sim/cockpit2/gauges/actuators/barometer_setting_in_hg_pilot", "writable") DataRef("QNH_CoPilot", "sim/cockpit2/gauges/actuators/barometer_setting_in_hg_copilot", "writable") DataRef("QNH", "sim/weather/barometer_sealevel_inhg") local starting_time = os.clock() local QNH_y1 local QNH_y2 local QNH_x local QNH_problem = false --------------------------------------------------------------------------------------------- function Steffi_says() local pos = 0 if math.abs(QNH-QNH_Pilot) > 0.01 then QNH_y1 = pos pos, QNH_x = big_bubble(20, pos, "Please check the barometer setting!", "Your altimeter is showing wrong values.", string.format("The right QNH is %2.2f in/Hg or %.1f hPa.", QNH, QNH * 33.8637526), "Or just click on this bubble and I'll fix it for you.") QNH_y2 = pos QNH_problem = true else QNH_problem = false end if os.clock() < starting_time + 10 then pos = big_bubble(20, pos, "Steffi says:", "Hi!", "My name is Steffi, and I'm your virtual copilot.", "Let's enjoy our flight.") end end do_every_draw("Steffi_says()") --------------------------------------------------------------------------------------------- function Steffi_does_on_clicks() if QNH_problem and MOUSE_X > 10 and MOUSE_X < QNH_x and MOUSE_Y > QNH_y1 and MOUSE_Y < QNH_y2 then QNH_Pilot = QNH QNH_CoPilot = QNH RESUME_MOUSE_CLICK = true end end do_on_mouse_click("Steffi_does_on_clicks()") ---------------------------------------------------------------------------------------------
バブルの中の英語の翻訳:
Please check the barometer setting! ””Your altimeter is showing wrong values.
The right QNH is %2.2f in/Hg or %.1f hPa. Or just click on this bubble and I’ll fix it for you.
気圧計の設定を確認してください! “”あなたの高度計は間違った値を示しています。
右側の QNH は %2.2f in/Hg または %.1f hPa です。 または、このバブルをクリックしてください。修正させていただきます。
時間が来たら消えるバブルの内容。
“Steffi says:”, “Hi!”, “My name is Steffi, and I’m your virtual copilot.”, “Let’s enjoy our flight.
「シュテフィはこう言っています。」「こんにちは!」「私の名前はシュテフィです。仮想副操縦士です。」「フライトを楽しみましょう。
os.clock()を使った点滅表示
ここではos.clock()で取得した秒数を、剰余で取得した値に変換、if分で切り替えて交互に表示させている。
どんな整数でも3でわると,剰余(%)のあまりは0,1,2のいずれかになる。意味はまったく不明なので以下のサイトで計算してくれるので参考に。
計算をやってくれるサイト:https://keisan.casio.jp/exec/system/1510710795
1÷3の余りは1、2÷3の余りは2、3÷3の余りは0、最後の0は分かりやすい。この剰余で計算して出てきた値を使用している。0、1、2を繰り返している。この剰余を使うと秒数を変換して繰り返すことができるようだ。
以下がその結果になる。1秒毎に以下の画面を繰り返す。
function Steffi_says() local starting_time = os.clock() local msgtime msgtime = starting_time % 3 --秒数を増やすには%3を%6にして2秒に1回点滅させるようにすることができるかも --上のmsgtimeを数値にして見てみる(0、1、2と3つの値が繰り返し表示される) -- %d=整数、 local info_to_print = string.format("msgtime = %d", msgtime) draw_string_Helvetica_18(200, 320, info_to_print) --1秒より小さい場合、以下を表示(つまり10秒間表示) if msgtime < 1.0 then --1より小さい「0」のときは赤文字 draw_string( 200, 350, "Please", "red" ) end if msgtime >= 1.0 and msgtime < 2.0 then --1以上、2以下のつまり「1」のとき draw_string(200, 350, "Please", "green" ) end --それ以外は何も表示しない。 end do_every_draw("Steffi_says()")
datarefのtimeを使った時間設定
テキストの点滅と移動
これはFlyWithLuaを導入する一番最初に表示される点滅のテキストがこれになる。
DataRef( “sim_time”, “sim/network/misc/network_time_sec”) これで時間を取得しているようだ。
%3とは上の取得したデータの余りの数値(剰余)を使っている。「3」という数値は3つの点滅を作成することができる。2つでいい場合は2として、下のif文を2つつくると良い。
3のまま2つのif文を作成すると2つめが長く表示されることになる。トンツーという感じ。datarefの「sim_time」をそのまま取得すると秒単位でカウントしていく。
%2で値を取得すると余りの数値が0と1の2種類の繰り返しになる。%3にすると0、1、2の3種類の繰り返しになる。
下のスクリプトはタイムを%3で演算したらどのような数値が出てくるのかをテストしている。
DataRef("sim_time", "sim/network/misc/network_time_sec") function MyHelloWorld() local msgtime msgtime = sim_time % 3 --------------------------------------------------------------------------------------- if msgtime < 1.0 then --1より小さい場合 draw_string(50, 300, "Please", "red") end --------------------------------------------------------------------------------------- if msgtime >= 1.0 and msgtime < 2.0 then --1.0より大きいか等しい draw_string(50, 300, "read", "green") end --------------------------------------------------------------------------------------- if msgtime >= 2.0 then --2.0より大きいか等しい draw_string(50, 300, "the manual!", "blue") end --------------------------------------------------------------------------------------- --テキストが右に移動しながら点滅しながら色が変化する draw_string( --以下のテキストを画面左50の位置から高さ350の位置に表示 -- + sim_time * 30 % 400は横に位置を時間を読んでプラスして右に移動している。 50 + sim_time * 30 % 400, 350, --50, 350, --止まって表示する場合はこれ "If you want this message to disappear you will have to follow the bubble's instruction!", -- math.floor(x) 小数点以下を切り捨てて整数にします sim_time - math.floor(sim_time), --これを外すと白色で止まる sim_time - math.floor(sim_time + 0.6) + 0.6, --色が変わる sim_time - math.floor(sim_time + 1.2) + 1.2 --外すとエラーになる ) --------------------------------------------------------------------------------------- end do_every_draw('MyHelloWorld()')
下の画面で、上の長い文字が右へ移動して行き、ある程度移動したら元の位置に戻って移動を繰り返す。さの間、テキストの色も交互に赤、緑、青と点滅する
下にある短いテキストは止まったまま赤、緑、青と点滅する。
時間を測る
do_sometimes()
フライトタイム:sim/time/total_flight_time_sec
秒で計る、X-Planeを起動している間ずっとカウントアップする。
sim/time/total_running_time_sec
sim/time/zulu_time_sec
下のスクリプトは時間になったら雲の中の色を白くすることができる。
どのくらいたったらというように時間を設定するには、他の方法もある。
雲の中を白くする、止まっていた機体でやってみたので雲が白くなるのがわからない。
--used dadatef --フライトタイムはずっと時間が増えるだけのなので、これは1回しか見ることが出来ない。 dataref("flighttime", "sim/time/total_flight_time_sec", "readonly") --フライト時間を計る dataref("sky_woic", "sim/private/controls/skyc/white_out_in_clouds", "writable") --雲の中の色を白くする --時間依存セット0の関数 function set_woic() if (flighttime > 50) then --50秒以上になったら以下を実行 sky_woic = 1 end end do_sometimes("set_woic()")