スクリプト/コツ/フレームスキップスクリプト(履歴ID:146)

最終投稿者:Cdv30200 aoi icon mini aoihikawa 更新:2011/12/22 14:26:13
フレームスキップスクリプト
(ご自由にご利用ください)

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

指定されたメイン処理実行タイミングより
処理が重くなった場合
描画回数を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
        end
        
        #----- ゲームのメイン処理を入れる場所 -----
        #(ゲームの終了時はmainloopをfalseに)
        
        
        if draw_flg
            drawCanvas() #描画OKならキャンバスを更新
        end
    else
        waitTime(1) #ゲームのメイン処理実行タイミングになるまで保留
    end
end
endInput() #入力受付の終了


ご意見やご質問などありましたら
こちらのブログ記事まで。