C++でDirectXを使用したゲームプログラミングしているのですが、
どうもプログラミングの組み方が悪いのか動作が重く、うまく動いてくれません。
そこでいまさらかもしれませんが、プログラミングにおいて『重い』や『軽い』というのはどのような書き方なのでしょうか?
例えば、
「for文やwhile文などのループ系は重い」、
「windowsプログラミングのtimeGetTime関数などの時間を扱う関数は重い」
などはよく耳にするのですが、そういう情報はどこから手に入れるのでしょうか?
わかる方いたら教えてください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
「ループ系は重い」といった単純な問題ではなく、あくまでもアルゴリズムの効率化の問題ですので、その可能性は無限にあります。
ゲーム系ならば描画、当たり判定、AIなどが最も処理が重い部分ですので、この辺を見直すのが良いのでは。描画は、ポリゴン数は多すぎないか、グラフィックカードの機能をちゃんと使っているか、などをチェックしましょう。壁の反対側にいるキャラクターを描く必要はないですし、遠くにいて小さくなってるモデルはポリゴンの少ない簡易モデルに切り替えたりしてスピードアップをはかれます。
当たり判定も、まずは大きな球体でチェックしてそれが当たっていればさらに細かくチェックする、別の部屋にいるキャラクターは完全に無視する、といった処理の効率化が必要です。
回答ありがとうございます。
>ゲーム系ならば描画、当たり判定、AIなどが最も処理が重い部分ですので、この辺を見直すのが良いのでは。
その当たりをもう一度見直してみます。
No.3
- 回答日時:
ゲームプログラミングに限らない話ですが、条件の成立を待つのにビジーウェイトするようなループを書くと「重い」プログラムを簡単に作れてしまいます。
たとえば、スレッドAがあるフラグをセットするのをスレッドBが待つというプログラムの場合、スレッドBで
while (flag.isSet() == false) { /* flagがセットされるまでただひたすらループしながら待つ */ }
というようなコードを 書いてはいけません。スレッドBのこのループを実行するのにCPU時間を食われてしまい、フラグの値を変化させる側であるスレッドAの実行がなかなか進まなくなります。
No.1
- 回答日時:
クロック数的なことはわからないけれど
最近の傾向としては処理量を見積もらずに適当に書いたコーディングが遅い傾向がありますね。
基本的に重いといわれている関数でもネイティブに処理するものであれば
対して気になる世界ではないです。
そんなことよりも、ファイルクローズやループないでなくてもできることをループないでやるとか。
あとは、排他ロックこの辺りがプログラムの実行を遅くする理由ではないですかね。
DirectXだと、DirectPlayがなんか変な動きしているので
あそこの処理を見直すと軽くなるかもしれません
回答ありがとうございます。
>あとは、排他ロックこの辺りがプログラムの実行を遅くする理由ではないですかね。
そこは気にしてなかったのでもう一度プログラムを見直して見ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
ループの特定入力終了
-
do-while文が禁止される理由
-
放電現象の2分法C言語プログラ...
-
プログラムで関数は使わない方...
-
Delphiで・・・
-
if文を使わずに奇数・偶数を判断
-
線形探索(番兵法)のプログラ...
-
C言語、whileループを抜け出す...
-
break文でループを一気に抜ける...
-
無限ループ対策
-
Excel VBAで年度をまたぐ期間の...
-
if文の中にfor文なのか、for文...
-
C言語 数字を削除する関数
-
C言語forループが完結した場合...
-
C++ DirectX カーソルの移動処...
-
エクセルVBAで Do While (1)って?
-
桁数を求めるプログラム。
-
UWSCにてある一定の動作を無限...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
do-while文が禁止される理由
-
Excel VBAで年度をまたぐ期間の...
-
break文でループを一気に抜ける...
-
エクセルVBAで Do While (1)って?
-
入力した数値を倍々するプログラム
-
For文の終了値を関数にしても問...
-
UWSCにてある一定の動作を無限...
-
C言語forループが完結した場合...
-
n重のfor文にするには?
-
for文while文の無限ループの違...
-
Delphiで・・・
-
Cプログラムが終了しない
-
strstr()関数の実装内容について。
-
PAD図の書き方
-
放電現象の2分法C言語プログラ...
-
PIC のプログラムについて ど...
-
__asm int 3でのブレイクポイン...
-
線形探索(番兵法)のプログラ...
おすすめ情報