Pause

『suica32』にポーズ・ボタンを付ける方法。


1.このサンプル・プログラム(新規作成箇所、改変箇所)のライセンス

『むずでょのAIMS/Luaライブラリー』
ポーズ・ボタン
Copyright(C)2012 むずでょ

※このサンプル・プログラムの新規作成箇所、改変箇所はむずでょが記述しました。
※複製・改変・再配布可。無保証。 修正BSDライセンスと同じとします。
※及び無料。


2.配布

手順1. 新しく .lua ファイルを1つ作る。新規作成。

s/frame0.lua

-------------------------------------------
-- 定数初期化
-------------------------------------------

FRAME0_pause = false; --ポーズ・ボタン。


function frame0_OnStart()
end

function frame0_OnStep()
    if( 1 == getJoyPressCount( 0, BUTTON_TRIG8) )then
        --ゲームパッドの[8:Pause]を押した場合と想定。

        if( FRAME0_pause )then
            --ポーズ解除。
            FRAME0_pause = false;
            setSceneFreeze( SC["game"], false )
        else
            --ポーズ。
            FRAME0_pause = true;
            setSceneFreeze( SC["game"], true )
        end
    end
end

function frame0_OnClose()
    cls();
end

    • ※ボタン8を使えるようにしておくこと。


boot


手順2. boot.lua に3箇所足す。

-------------------------------------------
-- 定数初期化
-------------------------------------------

G = {}; -- グラフィックハンドルはこの下にぶら下げる
S = {}; -- サウンドハンドルはこの下に略
A = {}; -- 全体から扱いたいアクターのハンドルはこの下に
SC= {}; -- シーン・ハンドルはこの下にぶら下げる。 --【改変/】追加。



-------------------------------------------
-- ゲームシーン呼び出し
-------------------------------------------
--ゲームのシーンスクリプトをprequireします。
prequire("s/scene/frame.lua");
prequire("s/scene/frame0.lua"); --【改変/】追加。



-------------------------------------------
-- OnStart
-------------------------------------------

-- 起動直後はbootシーンが呼ばれます。
function boot_OnStart()
    cls(); 
    clearLayerSettings();
    font_init();

    FONT_MINCHO16 = createTextFont("MS 明朝",16);
addScene("frame0"); --【改変/】追加。
   addScene("frame");

    auto_SceneAt("boot_OnStart")
end



手順3. game.lua に1箇所足す。

--------------------------------------------------------------------------------
-- OnStart
--------------------------------------------------------------------------------

function game_OnStart()
    --【改変】追加ここから。
SC["game"] = iThisScene()
   --【/改変】追加ここまで。







3.解説

(1)シーンのハンドルを格納するための、グローバルなテーブル変数を boot.lua に作っておく。

SC= {};


(2)シーンのハンドルは、シーンの ~_OnStart() で iThisScene()関数を書くと取得できる。

function game_OnStart()
    SC["game"] = iThisScene() -- グローバル変数にシーンのハンドルを入れる。
end

※予備知識: 取得したシーンのハンドルは、changeSceneされてシーンが変わった後は、古くなって使い物にならなくなる。


(3)シーンは、ポーズ(一時停止/解除)することができる。その時、シーンのハンドルを使う。
  "game"シーンをポーズするには、setSceneFreeze( SC["game"], true ) と書く。
  "game"シーンのポーズを解除するには、setSceneFreeze( SC["game"], false ) と書く。

※予備知識: boot_OnStart()の中に setSceneFreeze を書いても機能しなかった。(原理不明)


(4)"game"シーンの中で「ポーズ/ポーズ解除」プログラムを書くと、"game"シーンをポーズしたとたん、"game"シーンは止まってしまうので、ポーズ解除できなくなる。
そこで、「ポーズ/ポーズ解除」は "game"とは並列している別のシーン "frame0" を作り、その中の ~_OnStep() に書くことにする。

boot.lua で、"frame0"シーンを追加する。

suica32のシーン構造図
シーン構造図_suica32.png

ポーズボタンを付けたsuica32改のシーン構造図
シーン構造図_suica32改.png


  • 最終更新:2013-10-07 09:49:24

このWIKIを編集するにはパスワード入力が必要です

認証パスワード