
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で質問しましょう!
似たような質問が見つかりました
- Ruby VBA 2 2023/01/14 14:14
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- HTML・CSS HTMLの・要素・属性・属性値 はプログラム言語の「変数」みたいに変更できますか? 5 2022/10/04 05:27
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作りたいのですが 1 2022/10/24 18:56
- Java EclipseとVisual StudioをPC1台にインストールしただけではPCは重くならない? 3 2022/12/08 15:35
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- その他(IT・Webサービス) 動画が多い(容量が多い)Webサイト作成 1 2023/04/08 17:42
- その他(プログラミング・Web制作) プログラムはif文とforループが書ければなんとかなるので楽勝?? 6 2022/12/26 10:24
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルから読み取った「行の...
-
階層型ニューラルネットに準ニ...
-
break文でループを一気に抜ける...
-
入力した数値を倍々するプログラム
-
C言語、whileループを抜け出す...
-
do-while文が禁止される理由
-
他言語で言うcontinue文
-
整定時間
-
for文while文の無限ループの違...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
2÷3などの余りについて
-
数字以外が入力されたらエラー...
-
Enterキーを押されたら次の処理...
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
fgetsなどのときのstdinのバッ...
-
ある商品のロス率を5%見込み、...
-
プログラムでの数字につく”f”の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
ループを途中で抜けたいのですが。
-
C言語forループが完結した場合...
-
break文でループを一気に抜ける...
-
C言語、whileループを抜け出す...
-
プログラムで関数は使わない方...
-
入力した文字列から母音だけを...
-
For文の終了値を関数にしても問...
-
Cプログラムが終了しない
-
if文の中にfor文なのか、for文...
-
他言語で言うcontinue文
-
文字列を後ろから1文字ずつ表示...
-
整定時間
-
if文を使わずに奇数・偶数を判断
-
for文while文の無限ループの違...
-
excel VBA if文について
-
n重のfor文にするには?
-
特定の文字列が出てくるまでの...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報