
C言語でのsleep機能について
C言語で3Dゲームを作っている所です。今情報学科の大学1年でC言語歴は4年程度です。3Dゲームを作るのは初めてなのですが、普通ゲームって1秒間に何フレーム(fpsとか言ったかな?あまり詳しいことは知りません)というように、1秒間に画面を更新する回数って決めますよね?というより、決めないと早く更新しすぎてCPUが持たないですよね?
そこで、60フレームなら1/60秒間待って画面を更新する。というようにしたいのですが、「1/60秒待つ」というしっくりくる方法が、あまり見つかりません。いろいろ検索してwindowsで使えるsleep関数を見つけたのですが、家の環境はMacですし、なるべく多くのOSに対応するゲームを作りたいと思っています(最低Mac, Win, Linaxの3つぐらいは…)。
現在自分が用いている方法は、timerinit()という関数を自分で定義して、for分の1回のループにかかる時間を計測し(clock()を用いて)、その値を元にsleepf(double sec)という関数を定義し、sleepを行うようにしています。または、while分を用いてclock()をそのまま使ってsleepする方法をとっているときもあります。
これより良い方法って無いですか?あまりCPUなどは詳しくないですが、CPUとかが節約できるような方法があればとても嬉しいです。というより、自分が今やっている方法とWindowsで使えるsleep関数と比べると、やはり自分の方法のほうが精度が悪いのでしょうか?(CPUなどへの負担は大きいのでしょうか?)
長い質問になってしまいましたが、宜しくお願いします。
ちなみに…
【環境】MacOS 10.5
【エディタ】Xcode3.0
【言語】C言語(GLUTとOpenGLを使って3Dを描画しています)
【CPU】2GHz Intel Core 2 Duo
【メモリ】2G
(CPUとメモリはこんなもんですが、もう少し性能の低いパソコンにも対応させたいかな?)
No.2ベストアンサー
- 回答日時:
スリープはOSのシステムコールなので、マルチプラットホーム用のライブラリでもなければ共通で使うことのできる関数は存在しません。
なおビジーループでWaitするのは自プロセスだけでCPUを占有する、マルチタスクに対する悪行です。
1/60秒ごとにタイマー割り込み/イベントが発生するようにして、そのハンドラで処理した方が良いでしょう。
>>なおビジーループでWaitするのは自プロセスだけでCPUを占有する、マルチタスクに対する悪口です。
やっぱり、そうですよね。意味も無いループを繰り返してWaitしても、なんか気持ち悪いと思っていました><
あまりタイマー割り込みイベント等の知識は無いのですが、また勉強してみます^^
回答ありがとうございました。
No.4
- 回答日時:
Unix系のsleepには、1秒毎のsleep()と、精度をナノ(?)に上げたnanosleep()の2つがあります。
質問は「1/60のsleepがしたい」とのことですので、nanosleep() を使うことになります。
その機能については、terminal から「man nanosleep」とすれば知ることができます。あるいは、Xcodeの「ヘルプ」でも良いでしょう。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
タイミング等の都合による sleep中のwakeupシグナルは、signalハンドラー登録後、kill()で強制的に起こしてやれば良いです。
No.3
- 回答日時:
ところで、ゲームの種類は?
画面の更新タイミングは、ジャンルによって違うと思いますよ。
あと、3Dゲームって作ったことありませんが、一定間隔ごとに画面更新するものなのですか?
2Dだと、表示内容に更新が発生したときに最後一括して更新していたものですが。
# ベンチマークは、秒間何回処理できるをはかるものなので
# FPSが表示されているんじゃないかとちょっと思ってみたり(推測)
ゲームのジャンルはアクションです。詳しく言うとブロック崩しを作っているのですが、ボールは常に動いていますし、よくあるブロック崩しとちがって、ブロックも常に動いている(手前に前進してきている)状況です。
パズルゲーム等だったら、クリックされたときに更新などで、対応できそうなのですが><
でも、工夫すればWaitを掛けなくても良い方法もあるかもしれませんね。
回答ありがとうございました^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 画像編集・動画編集・音楽編集 【急】【Zbrush】3DCG初心者です。ノートPCでのZbrush動作環境につきまして 1 2023/08/19 17:38
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- モニター・ディスプレイ PCゲームで急にFPSが落ちました 2 2022/11/18 00:42
- CPU・メモリ・マザーボード パソコン購入でCPUについて(長文ですいません。) 26 2022/04/05 15:26
- CPU・メモリ・マザーボード 2009年のHPのデスクトップPCはCPU交換等して活用できますか/する価値はありますか? 9 2022/09/27 16:43
- オンラインゲーム Valorantの最低・推奨スペックについて質問させてください。 2 2022/09/07 17:48
- ノートパソコン このノートパソコンで大丈夫でしょうか? 2 2023/04/22 21:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++でもぐら叩きゲームを作り...
-
DOJAで赤外線通信による2人対...
-
作成したゲームに制限時間を表...
-
javaでゲームを作りたいです。...
-
C#で音楽の2曲同時再生の仕方
-
課題研究でVisual C#でトランプ...
-
箱庭ゲームの壁すり抜けの疑問
-
ゲームをつくりたいのですが
-
Javascriptでpk戦のゲームを...
-
abnormal program termination
-
プログラミング言語の取得方法
-
数学、プログラミング、物理、...
-
C言語、C+、C++、C#の違い
-
MacでVisual Basicしたい
-
COBOLで文字タイプを数字...
-
言語のことで。
-
現在専門学校に通っているんで...
-
プログラミングについてです。 ...
-
C言語とhtmlの違いを どな...
-
アセンブリ名とは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーDSのソフト作成に...
-
フリーゲームを解析したい
-
ゲームの開発言語(1980~2010年)
-
ゲームのソースコードを解析し...
-
ゲームのプログラム作成
-
abnormal program termination
-
ゲームを日本語化しようとする...
-
VisualC++でアニメーションgif...
-
ノベルゲームを作ろうとおもっ...
-
建物を3Dで内部まで再現してゲ...
-
プログラミング初心者がゲーム...
-
シーケンス制御を用いたゲーム...
-
プログラミング言語の覚え方
-
画像を差し替えるだけでオリジ...
-
プログラミング初心者が商業レ...
-
Now Loadingについて
-
ゲームプログラマについて
-
ゲーム開発の入門書を探しています
-
ゲームプログラミングの本を探...
-
プログラマの方に質問です
おすすめ情報