こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語について

ゲームプログラマーを目指しています。
学校ではまだC++とC#での2Dしかならっていなのですが・・・
3Dゲームを作ってみたいと思っています。
3Dゲームをやるときは処理が早いほうがいいですよね?
C++やC#やJAVAなどいっぱいあるのですがどれが一番処理が早いんでしょうか?

ここにないものでもいいです。
独学でしようと思っているので批判みたいなのはやめてください。
回答よろしくお願いします。

投稿日時 - 2012-06-12 00:19:22

QNo.7528302

困ってます

質問者が選んだベストアンサー

速度を考えるのは、まだ先でいいです。今やってることを確実に身につけることを考えてください。


どんな言語を使っても、最終的には機械語でないと、CPUには理解できません。
言語の速い遅いは、最終的に実行される機械語群がどれだけ高速にできるか、無駄をはぶけるか、によるものです。

アセンブリ言語は、バイナリーデータでしかない機械語を人間が理解できるように置き換えたもので、ほぼ機械語と同義と言えます。
機械語1命令単位でのチューニングができるので、最も高速になる可能性があります。

C言語は最終的に機械語に翻訳されます。アセンブリほどでは無いですが、最適化によってだいぶ効率のよいコードになります。なので、かなり高速になる可能性があります。
C++はCより複雑な分、若干速度が落ちることがあります。

C#は.NET framwork, JavaはJVMというものが中間に入っています。機械語を直接実行するのではなく、別の形式でかかれたプログラムを、この中間にあるものが解釈して、実行する機械語を決めます。
1段階挟まれるので、どうしても効率が悪くなり、遅くなりがちです。


ただし、これらは、あくまで「可能性」です。
百万個のデータをソートするのに、最高にチューニングしたアセンブリのバブルソートより、基本に忠実に書いたJavaのクイックソートの方が速いでしょう。
機械語でも下手に作れば、遅いはずのJavaに負けます。


また、最高速とプログラムの作りやすさは、おおむね反比例します。
Cが速いのは、「余分なことはしない」からです。
例えば、配列の添字。
C#などで、確保した以上の添字を使おうとすれば(a[10]と宣言したのに、a[100]を指定など)、例外が発生したと思います。これは、添字が範囲内かどうかのチェックをしているからです。
Cでは、このようなチェックはありません。エラーになるかどうかは状況次第です。まるでなにも問題が無いかのように動作することもあります。範囲内になるようにプログラミングする必要があります。
アセンブリとなると、書いてあることしか実行されません。


今はCPUの処理速度も早く、C#やJavaでも十分な速度で遊べるようになりました。
有名なMinecraftはJavaで書かれています。
しかし、基礎ができてなければ、速度以前の問題で、ゲームを作ることすらできません。
特に3Dは、2Dに無い要素がたくさんあります。
基礎を身に付けるのが、結局は近道だと思います。
プログラミングの基礎がわかっていれば、言語はマニュアル見ながらでもなんとかなるものです。

投稿日時 - 2012-06-14 03:35:37

お礼

まずは基礎ですね!
それはわかってますw
長文ありがとうございました。
かなり理解できました。

投稿日時 - 2012-06-14 14:12:40

ANo.8

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

マシン語とアセンブリ言語はほぼ同義ですよ。
極端にいえば
CPUが直接理解できるバイナリのコード(マシン語)に対して人がわかるように名前付けしたものがアセンブリ言語です。

投稿日時 - 2012-06-13 01:32:54

お礼

そうなんですか!ありがとうございます。

投稿日時 - 2012-06-14 14:11:10

学校で学ばれた C++ や C# で作るのがよいと思います。学習段階では。

2Dのプログラミングに比べると3Dは、必要とされる数学の比重が大きいです。描画や衝突判定などの演算はライブラリ等が行ってくれるでしょうが、そもそも数値の意味が分からないと思い通りに描画/操作できません。行列や幾何学が得意な場合を別にして、処理時間の短縮や別の言語に挑戦するより、まず集中して3次元の処理そのものを学ばれる方がよいと思います。

投稿日時 - 2012-06-12 22:57:38

お礼

3次元処理ですね。
頑張ってみます。

投稿日時 - 2012-06-13 00:25:20

ANo.5

C#やJavaは仮想環境で動くので(GJCなどの例外はあるが)そこが速度的なボトルネックになる。
やはりネイティブコンパイルできるC/C++あたりかな。
それと何を対象にするか。
XBOX360のゲームをプロとしてではなくてアマとして作る場合にはXNAが必須になってC#で作る必要が出てきます。

>C言語やアセンブラで同じシーンを表現しても
>たいして軽くはなりません。
コンパイラ任せではなくてガッツリとアセンブラでGPUを使う設定(Direct3D/OpenGL)にした方が
速度はでる可能性はあります。

>2Dでも3Dでも、画像処理部分はGPUが行いますので
それはゲームによって変わる。
2DならDirectX/OpenGLを使わなくてもゲームが作れるから旧来のWindowsのようなGDIで描画も可能。

投稿日時 - 2012-06-12 12:34:20

お礼

XNAのC#は現在使っています。2Dを作ってますが。。。
アセンブラもよくわかりません・・・
覚えておいたほうがよさそうなのでこれを機に勉強します。

投稿日時 - 2012-06-13 00:23:19

ANo.4

2Dでも3Dでも、画像処理部分はGPUが行いますので
言語がなんであってもそんなに変わりありません。

たとえば凄いエフェクトがかかるシーンがあったとします。
オブジェクト数も多く、総ポリゴン数も凄い数です。
この時高負荷なのはGPUです。CPUではありません。
ですから、C言語やアセンブラで同じシーンを表現しても
たいして軽くはなりません。

このことから、ご自身が扱いやすい言語を選択することを
おすすめします。

投稿日時 - 2012-06-12 09:26:10

お礼

C#には少し自信があるのでC#で覚えていきたいと思います。

投稿日時 - 2012-06-13 00:16:06

ANo.3

>いっぱいあるのですがどれが一番処理が早いんでしょうか?
処理スピード順に言ったら当然マシン語です。
1位 マシン語
2位 アセンブリ言語
3位 一応C言語やJAVAあたり

ゲームソフト開発に適しているかどうかは別物です。

投稿日時 - 2012-06-12 07:09:40

お礼

マシン語は初めて聞きました・・・
もっと勉強しておきます。

投稿日時 - 2012-06-13 00:17:53

ANo.2

単純に速度を求めるならCだと思うけど、最近はゲームエンジンを使って開発することの方が多いんじゃないかなぁ(3Dの描画などはゲームエンジン任せ)

投稿日時 - 2012-06-12 01:18:02

お礼

ゲームエンジンの事忘れていました。
そう言われればそうかもですね・・・

投稿日時 - 2012-06-13 00:15:14

今はJAVAです。Cはゲームには不向き。むしろ、目に見えないところをカスタマイズするのがCの役割といってもいい。

投稿日時 - 2012-06-12 00:42:11

お礼

Cは不向き何ですか・・・C#は割と簡単なので得意とまではいきませんが自信あったのですが・・・

投稿日時 - 2012-06-13 00:13:19

あなたにオススメの質問