
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他言語で言うcontinue文
-
For文の終了値を関数にしても問...
-
C言語forループが完結した場合...
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
c languageで 簡単な質問があ...
-
エクセルで可視セルにのみ値貼...
-
20'(角度)の計算がわかりま...
-
scanfの入力をgets関数で読み捨...
-
マイナスからプラスへ転じた時...
-
値差の%計算方法について
-
「Aに対するBの割合」と「Aに対...
-
gcc: incompatible pointer type
-
「指定されたキャストは有効で...
-
CStringをwchar_tに変換したい
-
return 1L
-
strncpyと_tcsncpy_sのヌルの扱...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
PAD図の書き方
-
入力した文字列から母音だけを...
-
入力した数値を倍々するプログラム
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
アルゴリズムです!四つの数字...
-
break文でループを一気に抜ける...
-
エクセルVBAで Do While (1)って?
-
モンテカルロシミュレーション...
-
このC#プログラムの1〜11を埋め...
-
プログラミングC言語についての...
-
C++ DirectX カーソルの移動処...
-
HEWのバグ?
-
ゲームオーバーのプログラム
-
プログラムで関数は使わない方...
-
Delphiで・・・
-
他言語で言うcontinue文
-
Excel VBAで年度をまたぐ期間の...
おすすめ情報