atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
frostar@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
frostar@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
frostar@wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • frostar@wiki
  • FPS管理

frostar@wiki

FPS管理

最終更新:2011年11月09日 08:48

frostar

- view
管理者のみ編集可
fpsとは
frame per second(1秒間のフレーム数)のこと。
もっと簡単にいうと、1秒間に何枚の画像を表示しているかということ。
1秒間に画像を少しずつ動かして表示することにより、動画のように見えるので、動画のなめらかさとも直結する。
もちろんfpsが大きいほどなめらかになるが、描画処理というのは時間がかかるもので、徒に大きくしすぎても無駄になる。
だいたい、ゲームだとfps60(1秒間に60回描画)位が普通っぽい。
fpsとは
実際にfpsをどう管理するか。
windowsのAPIにはTimerというものがあり、それを使う方法もあるが、精度が低いため、あまり向かない。
基本的には、マルチスレッド化して、そこでの無限ループで、fpsの管理と描画をすることになると思う。
実装
描画用スレッドの中身の概要。
DWORD ts=timeGetTime();//時間変数
DWORD te=ts;
int count=0;//描画回数
double f = 1000.0/60;//1フレームの時間(1000.0/fps。この場合はfps60の場合)
timeBeginPeriod(1);//timeGetTimeの精度変更
while(TRUE){
	te = timeGetTime();
	if((te-ts)>=f*count){//フレーム処理
		//更新処理
		if(!((te-ts)>=((count+1)*f))){//フレームスキップ処理
			//描画処理
		}
		count++;
	}
	if((te-ts)>=1000){
		//1秒ごとにtsとcountの初期化
		//(FPS描画)
		ts = timeGetTime();
		count=0;
	}
	Sleep(1);
}
timeEndPeriod(1);//timeGetTimeの精度を元に戻す
関数説明
timeGetTime、timeBeginPeriod、timeEndPeriodについては時間計測のページを参照
処理説明
まず、最初の4行で使用する変数の定義と初期化を行い、whileループの中に入る。
また、timeBeginPeriod(1)として、タイマ精度を1msに変更する(精度が低くても問題ないのであれば変更しなくてもよい)。
timeBeginPeriodを使用すると、他のアプリケーションのタイマにも影響を及ぼすらしいので注意。
特に使わなくなった時にはtimeEndPeriodを確実に呼ぶこと(引数はBeginと同じ)
whileループの最初では、変数teに現在の時間を入れる。
次の条件分では(te-ts)>=f*countを条件として、フレームの処理に入る。
te-tsは開始時と現在の時間で、それがf*count、つまりフレーム処理予定の時間よりも大きいときはフレーム処理を行う。
フレーム処理では、画面の更新処理と画面の描画処理を行う。
描画処理、フレームスキップについては後述。
(te-ts)>=1000、つまり1000ms(1秒)経過するごとにtsの値の更新とcountの初期化を行う。
ここで、初期化する前のcountの値はそのままFPSとなっている(厳密にいえばcount/(te-ts)なんだろうが)。
そして、処理が終わったら1msのSleepをかける。
描画処理とフレームスキップ
描画処理は、処理内容によってはその処理だけで1フレームの時間をオーバーし、次の更新タイミングを超える場合がある。
そのような場合には、描画処理を飛ばすことにより、フレームの整合性を保つ。
これをフレームスキップという。
描画処理を飛ばしても、更新処理は行われるため、アニメーション自体の整合性も保たれるのである。
フレームスキップを行う条件は!((te-ts)>=((count+1)*f))となっている。
(count+1)*fは、次の更新タイミングであり、現在の時間が次の更新タイミングよりもオーバーしていないときに描画処理を行う。
つまり、オーバーしているときは描画は行われないため、フレームスキップとなる。
「FPS管理」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


frostar@wiki
記事メニュー

メニュー

  • トップページ
  • プロフィール
  • コメント
    • 足跡
    • ツール
    • その他
  • 公開・更新状況について
作ったもの
  • 注意事項
  • TRPG支援ツール
    • SW2.0
      • キャラ管理ツールver2
      • 表出力ツール
      • 抽出ツール
    • でたとこサーガ
      • でたとこツール
    • 永い後日談のネクロニカ
      • キャラ管理ツール
    • その他
      • 2次元戦闘管理ツール
  • LimeChat2用マクロ
    • インストール・設定
    • 直線距離管理ツール
      • Reference
    • HPMPツール
      • Reference
    • 汎用ランダム出力ツール
      • Reference
    • 汎用デッキツール
      • Reference
  • ライブラリ
    • C++
      • ListViewEx

過去の遺物
  • ソフトの配布について
  • お手伝いについて
  • SW2.0
    • キャラ管理ツール
      • FAQ
    • GMツール
    • モンスターツール
  • DX3rd
    • キャラ管理ツール
  • 迷宮キングダム
    • キャラ管理ツール
    • まよきんダイス
  • それ以外
    • ADVスクリプタ
  • 作りたいもの
TRPG
  • コラム
    • コラムについて
    • TRPGとは
    • オンラインセッションについて
    • GM向け
      • GMを始める前に
      • シナリオの作り方
      • マスタリング
  • システム紹介
    • SW2.0
      • 基本ルールブック
      • データ系サプリメント
      • データ系サプリメント2
      • プレイヤーズハンドブック
      • シナリオ系サプリメント
      • ツアー系サプリメント
  • データ
    • SW2.0
      • モンスターデータ
プログラム
  • プログラムを始める人へ
  • プログラムメモ
    • データ構造
      • リスト構造
    • 時間計測
    • FPS管理
    • 数学関数
    • 文字列操作関数
      • strrep
    • 描画関数
      • TransparentAlphaBlt
      • RotateBlt
      • RotateTransparentAlphaBlt
      • 描画関数の時間比較
    • 知っておくと便利
    • コントロール
      • 色を変える
      • チェックボックス付きリストビュー
    • C++標準ライブラリ系
      • StringSplit
      • AccessIterator
      • Java風Iterator
    • winsock系
      • WebSocketサーバ
    • JavaScript系
      • JSONPででたとこのデータ取得
  • CodeIQ
    • 結城浩さんの問題
      • Bits
      • Nick
      • Scissors
    • Paiza Online Hackathon
      • 新人女子の書いたコードを直すやつ
リンク

自分関係

  • リンクについて
ここのページへのリンクについてはこちら
  • ブログ:幾星霜
TRPGのセッション記録とかメインのブログ
  • USTREAM:frostのプログラム雑談室
生配信チャンネル。プログラム<雑談
気が向いたときにやります
  • THE INTERVIEWS
個人的な質問に答えてます。

TRPG系

  • 月光華亭
お世話になっているオンラインセッションサイト
  • TRPG.NET
TRPGのことならここ!
IRCサーバなど、お世話になってます。
  • 屍少女たちの永い午睡(相互)
ネクロニカの支援サイトです。ツール開発やオンセもやっています。

プログラム系

  • 猫でもわかるプログラミング
初心者のためのプログラムのページ。WindowsSDKの方についても詳しく書いています。
  • 窓プログラミング
windowsSDKのテクニックがいろいろ書いてあります。
  • C/C++リファレンス
C++STL(標準テンプレートライブラリ)の日本語版リファレンスです。

@frost_star からのツイート

更新履歴

取得中です。


ここを編集
記事メニュー2
最近更新されたページ
  • 2006日前

    足跡
  • 3742日前

    JSONPででたとこのデータ取得
  • 3742日前

    メニュー
  • 3747日前

    でたとこサーガ支援ツール
  • 3747日前

    表出力ツール
  • 3748日前

    直線距離管理ツール
  • 3755日前

    直線距離管理ツール:Reference
  • 3755日前

    SW2.0キャラ管理ツールver2
  • 3834日前

    汎用ランダム出力ツール:Reference
  • 3834日前

    汎用デッキツール
もっと見る
最近更新されたページ
  • 2006日前

    足跡
  • 3742日前

    JSONPででたとこのデータ取得
  • 3742日前

    メニュー
  • 3747日前

    でたとこサーガ支援ツール
  • 3747日前

    表出力ツール
  • 3748日前

    直線距離管理ツール
  • 3755日前

    直線距離管理ツール:Reference
  • 3755日前

    SW2.0キャラ管理ツールver2
  • 3834日前

    汎用ランダム出力ツール:Reference
  • 3834日前

    汎用デッキツール
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. しかのつのまとめ
  5. シュガードール情報まとめウィキ
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. ソードランページ @ 非公式wiki
  8. SYNDUALITY Echo of Ada 攻略 ウィキ
  9. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  10. ドラゴンボール Sparking! ZERO 攻略Wiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 千鳥の鬼レンチャン 挑戦者一覧 - 千鳥の鬼レンチャン サビだけカラオケデータベース
  3. 召喚 - PATAPON(パタポン) wiki
  4. ロスサントス警察 - ストグラ まとめ @ウィキ
  5. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. ステージ - PATAPON(パタポン) wiki
  7. 犬 ルリ - ストグラ まとめ @ウィキ
  8. ステージ攻略 - パタポン2 ドンチャカ♪@うぃき
  9. 鬼太郎誕生 ゲゲゲの謎 - アニヲタWiki(仮)
  10. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.