同人サークル ぐれーすけーる

 
トップページ
東方Projectは上海アリス幻楽団様の著作物です。
AIMSはD.N.A.Softwares様のゲームエンジンです。
ライフ・カウンターの
     ダウンロードとソース解説だぜ☆
ダウンロード
━━━━━
 zipだぜ☆ 7zip などで解凍できるぜ☆

#92 ライフ・カウンター描画(ソース付き).zip
スクリーンショット
━━━━━
画像
━━━━━
gfx
clear.png ※2ドット四方の透明画像だぜ。見えない。『suica32』から持ってきたぜ☆
life_1.png
life_2.png
ブート
━━━━━
boot.lua
抜粋
-------------------------------------------
-- 共有関数読込
-------------------------------------------
-- AIMSのファイルは全てprequire関数で読み込んでください
-- ビルトインのrequireも使えますが、
-- requireでは、packerでパックしたファイルの中をスキャンしてくれません
prequire("s/etc/nwl.lua")
prequire("s/etc/txt.lua")

-- アクター
--─────
prequire("s/chr/chr_lifeCounter.lua")

-- シーン
--─────
prequire("s/scene/scn_game.lua")
(1) 「ライフカウンター」アクターを使えるようにするぜ☆
抜粋
-------------------------------------------
-- OnStart  このシーンに切り替わったときに実行されます  ※起動直後はbootシーンが呼ばれます
-------------------------------------------
function boot_OnStart()
    cls()
    clearLayerSettings()


    -- 1.画像ファイル読込
    --━━━━━

    -- フォント  ※これは、トゥルータイプ・フォントを使うときのやり方
        -- 「Now Loading...」用他
            V.fntsz1 = 16
            F1.fnt1  = createTextFont( "MS UI Gothic", V.fntsz1 )

        -- 大き目の文字
            V.fntsz2 = 48 -- フォントサイズ。後で使うので、いちいち覚えておく必要がある
            F1.fnt2  = createTextFont( "MS UI Gothic", V.fntsz2 )

    -- 文章
        G.ttf = {} -- あとで使います
                   -- アプリの最後に、トゥルータイプ・フォントを作る過程で作ったグラフィックを全削除するために必要です

    -- 透明画像
        G.clear = loadGraphic("gfx/clear.png")
        setGraphicCenter( G.clear, 0, 0 )
(2) 透明画像を読み込んでおくぜ☆
シーン
━━━━━
s
scene
scn_game.lua
抜粋
-------------------------------------------
-- OnStart  このシーンに切り替わったときに実行されます
-------------------------------------------
function scn_game_OnStart ()

    -- 3.アクター表示(奥から順)
    --━━━━━

    -- 背景
        A.title = createActor( G.title, 640/2, 480/2, L_MIDDLE )

        -- 不透明度を 0 にしたあと、128フレームかけて、毎フレーム2ずつ不透明度を上げていきます。
        addMover( A.title, -1,   1, MOVER_SETALPHA, 0 )
        addMover( A.title, -1, 128, MOVER_ADDALPHA, 2 )

    -- ライフ・カウンター
        A.lifeCounter = createActor( G.clear, 172, 40, L_MIDDLE, "chr_lifeCounter")

    -- 文章
        --                                 文章                       フォント,縦幅,プロポーショナル    赤   緑   青   α      x    y             レイヤー    xを左揃えの左端にするなら1
        G.ttf[3], A.msg[3] = txt_createF1( "ゲームパッドの",          F1.fnt1, V.fntsz1, false,         51,  51,  51, 255,      45, 2.5*V.fntsz1, L_MIDDLE,    1 )
        G.ttf[4], A.msg[4] = txt_createF1( "[→][←]ボタンで",        F1.fnt1, V.fntsz1, false,         51,  51,  51, 255,      45, 3.5*V.fntsz1, L_MIDDLE,    1 )
        G.ttf[5], A.msg[5] = txt_createF1( "ライフが増減するぜ☆",    F1.fnt1, V.fntsz1, false,         51,  51,  51, 255,      45, 4.5*V.fntsz1, L_MIDDLE,    1 )
end
(3) 透明の画像を表示する、アクターを作っているぜ☆
アクター
━━━━━
s
chr
chr_lifeCounter.lua
抜粋
-------------------------------------------
-- nowLoading1  ナウ・ローディング時の処理
-------------------------------------------
function chr_lifeCounter_nowLoading1()

    -- 画像ファイル読込
    --━━━━━

    -- ライフ・カウンター
        G.life_1 = loadGraphic("gfx/life_1.png")
        G.life_2 = loadGraphic("gfx/life_2.png")
end
table.insert( VV_nwl.list1, chr_lifeCounter_nowLoading1 )
(4) Now Loading...のときに、ハート画像をロードするぜ☆
-------------------------------------------
-- OnStart  このアクターを作成したときにすぐ実行されます
-------------------------------------------
function chr_lifeCounter_OnStart()

    -- 描画を行う設定
        useOnDrawEvent(true)
end
(5) ~_OnDraw( )ファンクションが使えるようになるぜ☆
-------------------------------------------
-- OnDraw  毎フレーム描画を行います
-------------------------------------------
function chr_lifeCounter_OnDraw()

    local lifeMax = 5
    local w = 32

    for i = 1, lifeMax, 1 do

        -- V.life は 0~5 とします
        if i <= V.life then
            -- 中身のあるハート
            drawGraphic( G.life_2, (i-1)*w, 0 )
        else
            -- 空っぽのハート
            drawGraphic( G.life_1, (i-1)*w, 0 )
        end
    end
end
(6) 毎フレーム、V.life の数字を確認しながらハートを描画しているぜ☆

   またのお越しをお待ちしております