『スクリプト コツ』 フレームスキップスクリプト

投稿者:Cdv30200 aoi icon mini aoihikawa 投稿日:2011/08/03 00:59

フレームスキップスクリプト
(ご自由にご利用ください)

------------------------------

指定されたメイン処理実行タイミングより
処理が重くなった場合
描画回数を1/2にするスクリプトです。

------------------------------

#----- 変数の設定 -----
fps = 0
fpscount = 0
oldfpstime = 0

draw_setting = 50 #ゲームのメイン処理実行タイミングを設定(ミリ秒)
draw_count = 0
olddrawtime = 0
draw_flg = false

setBaseTime() #時間計測の開始
startInput() #入力受付の開始

#----- ゲームのメインループスタート -----
mainloop = true
while mainloop
    
    #----- FPSの計測と判定 -----
    timer = getTime() #差分の時間を取得
    
    fps = fps + 1 #FPSのカウント
    fpscount = timer - oldfpstime
    
    if fpscount < (draw_setting * fps)
        draw_flg = true #最低限のFPSを満たしている場合描画OK
    else
        #最低限のFPSを満たしていない場合、前回描画したかどうか
        if draw_flg
            draw_flg = false
        else
            draw_flg = true
        end
    end
    
    if fpscount > 999
        #1秒を超えたらFPSのカウントをリセットする
        fps = 0
        oldfpstime = timer
        fpscount = fpscount % 1000
    end
    
    #----- ゲームのメイン処理実行判定 -----
    draw_count = timer - olddrawtime #メイン処理実行タイミングのカウント
    
    if draw_setting < draw_count
        #ゲームのメイン処理実行タイミングになっていたら、カウントをリセットする
        olddrawtime = timer
        draw_count = draw_count % draw_setting
        
        #キー入力の判定
        while hasInput()
            takeInput()
                #----- キー入力の判定処理を入れる場所 -----
        end
        
        #----- ゲームのメイン処理を入れる場所 -----
        #(ゲームの終了時はmainloopをfalseに)
        
        
        if draw_flg
            drawCanvas() #描画OKならキャンバスを更新
        end
    else
        waitTime(1) #ゲームのメイン処理実行タイミングになるまで保留
    end
end
endInput() #入力受付の終了

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/22 14:25, 履歴)
ikosamiさま>

ご指摘ありがとうございます。
修正いたしました。
Material 7186 1 mini ikosami(投稿日:2011/12/22 14:03, 履歴)
        #キー入力の判定
        while hasInput()
            takeInput()
                #----- キー入力の判定処理を入れる場所 -----
                
            end
        end

ってend一つ多くないですか?
Material 7186 1 mini ikosami(投稿日:2011/08/04 00:06, 履歴)
>>処理能力ではなく、時間軸に対して
>>(ある程度の限度まで)一定になるというメリットも。
そういえばそうですね。僕の「いこさみジャンピングDX」も
パソコンの処理能力によってクリアタイムが異様に変わってしまってますし(^^;)
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/08/03 22:39, 履歴)
>hightallerさま
さらなる発展も願いながら(w

>rurun9さま
全然、本職ではなかったり。
ちまちまと調べながら作ってみました。

>ikosamiさま
処理能力ではなく、時間軸に対して
(ある程度の限度まで)一定になるというメリットも。
Material 7186 1 mini ikosami(投稿日:2011/08/03 19:10, 履歴)
確かに、毎回描画してるよりは
はるかに軽くなりそうですね(^^)
Nyan mini rurun9(投稿日:2011/08/03 11:49, 履歴)
コレ凄ーい。
流石、本職の方!勉強になります。
Logo mini hightoller(投稿日:2011/08/03 05:00, 履歴)
今月の技術躍進の予感