--:-- LUA API

画面遷移

別のLuaスクリプトの画面や、他のアプリへ移る

一覧

pico.pop([result])               -- 自分を開いた画面へ戻る
pico.push_scene(path [, args])   -- 別のLuaスクリプトの画面を開く(戻ってこられる)
pico.change_scene(path [, args]) -- 今の画面を別のLuaスクリプトに置き換える
pico.launch_app(name)            -- ランチャにある別のアプリを開く

どれも頼むだけで、実際に画面が変わるのはそのフレームの終わりです。呼んだ後のコードもそのまま実行されるので、後片付けを続けて書けます。

push_scene・change_scene・pop

  • push_scene(path) は今の画面を残したまま新しい画面を開きます。新しい画面で pico.pop() すると、元の画面へ戻ります。
  • change_scene(path) は今の画面を置き換えます。置き換えた画面で pico.pop() すると、置き換えられた画面を飛ばして、その前の画面へ戻ります。
  • pico.pop() は、自分を開いた画面(ランチャ、または push_scene を呼んだ画面)へ戻ります。
ランチャ --push_scene--> A --change_scene--> B --pop--> ランチャ

(Aは change_scene で置き換えられたので、Bから戻る先はランチャ)

path はSDの絶対パスです。同じアプリの別のファイルなら pico.path_join(pico.app_dir(), "settings.lua") と書きます。開いた先でもアプリのフォルダ・権限・require はそのまま同じです。

戻ってくると最初から実行し直す

push_scene で開いた画面から戻ってくると、元の画面のスクリプトは最初から実行し直されます。変数に持っていた状態は消えるので、残したいものは次のどれかで受け渡します。

やりたいこと使うもの
開く画面に値を渡すpush_scene(path, args) → 開いた画面で pico.args()
開いた画面から結果を受け取る開いた画面で pico.pop(result) → 元の画面の on_result(result)
離れる前の状態を戻ってから復元するon_suspend() が返したテーブル → on_resume(state)
アプリを閉じても残すpico.store_save() / pico.store_load()、またはSDへ保存

書き方の例は 画面遷移API にあります。

トップレベルで呼ばない

-- だめ: この画面に戻ってくるたびに(最初から実行し直すので)すぐ移ってしまう
pico.launch_app("電卓")

-- よい: ボタンなどのイベントから呼ぶ
pico.on(button, "press_start", function()
    pico.launch_app("電卓")
end)

push_scene / change_scene も同じ理由で、イベントから呼んでください。

launch_app

ランチャにある別のアプリ(OS標準のアプリを含む)を名前で開きます。

if not pico.launch_app("電卓") then
    pico.show_error("アプリが見つかりませんでした")
end

名前が見つからなければ false を返します。開いたアプリは、そのアプリ自身の権限で動きます。

ステータスバーを避ける

local x, y, w, h = pico.content_rect()

画面上部のステータスバーを除いた、アプリが使える範囲を返します。ウィジェットの配置はこれを基準にします。