VC++を使ってプログラミングをしようと思いました。
今は全然出来ないのですが、最終的には3Dのフライトシミュレーターみたいなものを作りたいと考えています。(いつになるか分かりませんが^_^;)

そこで、とりあえずVC++に慣れるために2Dのシューティングゲームを作ろうと思ったのですが、この場合はDirectXを使う方がいいのですよね?

そこで質問なのですが、DirectXの7と8どちらを使うべきなのでしょうか?
8からはかなり変わって2Dの表示も3Dを使ってやると聞いたのですが、それは7で2Dのゲームを作るより難しいのでしょうか?

回答よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

DirectX7迄は2D、3D表示回りはDirectDrawとDirect3Dに別れており、イメージとしてはDirectDrawの用意したキャンバスにDirect3Dで演算し、生成した2Dのイメージを貼り付けるという2Dが主導のシステムでした。


それがDirectX8以降はDirectDrawが廃止されDirect3Dが画面表示も受け持つ事になりました。そのため2Dのアプリケーションを作る為には、3D空間上に画面として表示するポリゴンを用意してやり、そのポリゴンの上に2D画面として表示するテクスチャを張りつけるという手順を取る事になります。
つまり、DirectX8では2Dを表示するのに3Dの知識が多少なりとも必要になるというわけです。(多分DirectX8SDKの中にサンプルがあるでしょうからそれを使うという手もありますが・・・)

2Dのものを作るのであればDirectXにこだわる必要も無いと思います。最近のPCは性能も上がり、10万円を切るようなPCでも結構なビデオ性能を持っていますのでGDIを使ってCreateDIBSction APIで作ったDIBに画面を描画して表示・・・
という手法でもいいんじゃないでしょうか?パレット操作が絡んでこない限りはGDIで作った方が楽だと思いますが・・・復帰時の画面レストアとか考える必要も無いですし。

蛇足
3Dを使う場合でもDirectX以外にもOpenGLという方法もありますよ(こちらの方が初期化は簡単です)。後3Dと2Dでは考え方がかなり違う為、いきなり3Dからはじめてもいいと思いますよ。ただ2Dより数学は要求されますが・・・とりあえず行列とベクトルの本は一冊用意しておくべきでしょう(笑)
    • good
    • 0
この回答へのお礼

今回は教えてもらった方法で作り、次からDirectXを使いたいと思います。

回答ありがとうございました

お礼日時:2001/05/29 10:09

2Dのみの場合は、WindowsNTでの動作も考慮して


DirectX3で組むのもいいかもしれません。

まあ、インストールするバージョンはどれでもいいですが
使用(プログラミング)するバージョンを3でやれば
プラットホームが少し増えていいかも知れませんよ!

どうしても7か8かで選ぶなら、
8の方が簡単かと思います。(初期化が得に簡単になった)
ただ8でやった場合、使用できる画像のサイズが
2の乗数じゃないといけないとかいろいろと
不便なところもありますが。
    • good
    • 0
この回答へのお礼

7より8の方が簡単なんですね(^.^)
今回はDirectXは使わない事になりましたが、次は8でいきたいと思います。

回答ありがとうございます。

お礼日時:2001/05/29 10:07

DirectXの7と8でしたら、今後の展望も含めて、8の方が旬だとは思いますが、お使いのマシンのビデオカードによっては、8の機能(特に3Dの部分)を、自分で作ってて、分からないっといったような・・、フルに活かせない(表示できない)場合も出てくると思います。



これを機に、GeForce3のような、8にフル対応したカードを買ってしまうか、7で最初の触りだけ作ってみて、8の触りと比べてみる(機能差の確認等)、という感じが良いのではないでしょうか。
また、決していやみではないのですが、DirectX8を使いこなせるようになった時には世の中はすでに、9か10かが定番・・、なんてことも十分ありえますので(笑)、先を見越して今のうちからより新しい方、なんてのでも良いと思います。

>8からはかなり変わって2Dの表示も3Dを使ってやると>聞いたのですが、それは7で2Dのゲームを作るより難し>いのでしょうか?

最終目的次第ですが、やはり、オープニング周りやメニュー画面なども必要ですよね、
結局、避けては通れないと思いますので、難しいかどうかは考えない方が良いと思いますです。
    • good
    • 0
この回答へのお礼

GeForce3欲しいですけどお金が・・・
今回はDirectXは使わない事にしました。
開発期限があり、プログラミングもあまり出来ないのにいきなりDirectXが出来るか心配になり。。。

回答ありがとうございました。

お礼日時:2001/05/29 10:06

 7と8のどちらを使うかは好みの問題です。


 上位互換はあるので8を使ってもいいんですが、そうすると7までしか持っていない環境の人に、バージョンアップを強制させることになります(無料でできるとはいえ)。
 ゲーム制作の基本コンセプトをもとに、どちらにするかを決めればいいと思います。
    • good
    • 0
この回答へのお礼

自分で質問しといてちょっと。。。って感じなんですが、DirectXは使わない事にしました。
回答ありがとうございました。

お礼日時:2001/05/29 10:02

全画面表示とかするなら、


DirectX使ったほうが良いのではないでしょうか。

回互換があると思うので、8入れとけって感じもしますが、
新し物好き考えでは駄目かな?

http://www.hh.iij4u.or.jp/~kachin/directx/
http://www.geocities.co.jp/SiliconValley-SanJose …

参考URL:http://www.bio100.co.jp/
    • good
    • 0
この回答へのお礼

参考URLありがとうございます。
でも、今回はDirectXはやめる事にしました。(いろんな都合で。。。)

回答ありがとうございました。

お礼日時:2001/05/29 10:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVC++でシューティングゲームを作っているのですが・・・

下のコードをビルドすると、
自分の意図としては、ウィンドウの左上に自機ビットマップが表示されてほしいのですが、
真っ黒な画面になってしまいます。
正確に言うと、背景が黒、自機ビットマップの画像が真っ黒、自機ビットマップの領域にあたる四角が白くなります。
症状に見当がつかないので、手を貸して頂きたいです。
よろしくお願いします。
ちなみに、wc.hdrBackgroundは(HBRUSH)(COLOR_WINDOW+1)となっています。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
static RECT sizeWnd;

static HDC hDC; PAINTSTRUCT ps;
static HDC hMemDC; static HBITMAP hMemBmp;
static HDC hMjDC; static HBITMAP hMjBmp; static BITMAP infoMjBmp;

static POINT posMj;
static int flagMjShot; static POINT posMjShot;

switch (message)
{
case WM_CREATE:
GetClientRect(hWnd, &sizeWnd);// クライアント領域の大きさをsizeWndに格納

// フロントバッファの初期処理
hDC = GetDC(hWnd);

// バックバッファの初期処理
hMemDC = CreateCompatibleDC(hDC);// hDCと互換性をとるメモリデバイスコンテキストhMemDCを構築
hMemBmp = CreateCompatibleBitmap(hMemDC, sizeWnd.right, sizeWnd.bottom);
// hMemDCと互換性のあるビットマップhMemBmpをsizeWndの大きさで生成
SelectObject(hMemDC, hMemBmp);

// 自機ビットマップの初期処理
hMjDC = CreateCompatibleDC(hMemDC);// hMemDCと互換性をとるメモリデバイスコンテキストhMjDCを構築
hMjBmp = (HBITMAP)LoadImage(// ビットマップイメージMYJET(リソース)をhMjBmpに設定
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDB_MYJET), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR
);
SelectObject(hMjDC, hMjBmp);// hMjDCにhMjBmpを設定
GetObject(hMjBmp, sizeof(BITMAP), &infoMjBmp);// hMjBmpのビットマップ情報をBITMAP構造体infoMjBmpに格納

SetTimer(hWnd, 1, 10, NULL);// 100分の1秒毎にWM_TIMERメッセージを送るタイマー1をセット
break;

case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);// hDCにディスプレイのデバイスコンテキストのハンドルを格納
BitBlt(// hDCにバックバッファhMemDCを転送
hDC, 0, 0, sizeWnd.right, sizeWnd.bottom,
hMemDC, 0, 0, SRCCOPY
);
EndPaint(hWnd, &ps);
break;

case WM_TIMER:// 一定時間毎の処理
// 自機ビットマップをバックバッファhMemDCに描画
StretchBlt(// hMjDCを、posMjを左上の座標として縦横を3倍に引き伸ばしてhMemDCに転送
hMemDC, posMj.x, posMj.y, infoMjBmp.bmWidth * 3, infoMjBmp.bmHeight * 3,
hMjDC, 0, 0, infoMjBmp.bmWidth, infoMjBmp.bmHeight, SRCCOPY
);
InvalidateRect(hWnd, NULL, FALSE);
break;

下のコードをビルドすると、
自分の意図としては、ウィンドウの左上に自機ビットマップが表示されてほしいのですが、
真っ黒な画面になってしまいます。
正確に言うと、背景が黒、自機ビットマップの画像が真っ黒、自機ビットマップの領域にあたる四角が白くなります。
症状に見当がつかないので、手を貸して頂きたいです。
よろしくお願いします。
ちなみに、wc.hdrBackgroundは(HBRUSH)(COLOR_WINDOW+1)となっています。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa...続きを読む

Aベストアンサー

とりあえず…
作成されたばかりのデバイスコンテキストには、1x1ピクセルのモノクロビットマップが選択されています。
なので『hMemDCと互換性のあるビットマップhMemBmp』はモノクロになってしまうのです。

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

QVC++5.0とVC++6.0の違いは?

何がどう変わったんでしょうか?
なんとなく使っているだけなのでぜんぜんわかりません。

簡単にんでいいんで思いつくことを書いてもらえるだけでもうれしいです。


よろしくお願いいたします。

Aベストアンサー

MFCのバージョンが違います。MFCのリファレンスを見れば6で増えた機能が分かります。

例えばブラウザを簡単に作れるCHtmlViewは6でないと使えません。

QVC++6.0からVC++.NETへの変遷について

VC++がようやく分かり出したこの頃ですが、今日本屋に立ち寄ったら、なっ なんとVC++の本がほとんど無くなり、代わりにVC++.NETとVC#ばかりになっていました。

C#はVC++とは違うと聞いていたのですが、読んでみるとVC++.NETもかなり違ってました。
(かなり違うという表現は、各人の状況により意見が異なると思いますが)

私のような本を見ながらコードを打って勉強している初心者にとって、VC++.NETの本ではVC++6.0を動かすことができません。

今から勉強する人や本を買って勉強しようとしている人あるいは、コンパイラを手に入れようとしている人はVC++.NETに移行してしまわざるを得ないのでしょうか?

すでにVC++6.0を十分活用出来ている人も、時代の流れでNETやC#を勉強していかなければならないのでしょうか?

つまり、単なるバージョンアップとは一線をなす変更がなされたということなのでしょうか?

良くご存知の方見解をお願いします。

Aベストアンサー

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したものが無駄になることはありません。
たぶん、.NET環境の開発には、C++よりもC#やVB.NETを利用することが
多くなると思いますが、C++を理解していることはプラスにはなってもマイナスには
なりませんので、頑張って下さい。

.NET関連のサイトを2つご紹介しておきます。ご参考に。
http://www.microsoft.com/japan/msdn/library/default.asp
http://www.atmarkit.co.jp/fdotnet/index.html

すぐにではありませんが、.NETに移行せざるを得なくなるでしょうね。
ただ、開発環境という面では、VS.NETにはC++が含まれており、C++の部分は
従来のC++も利用できるようになっていて、これはアンマネージC++と呼ばれています。
C++で.NETのコードを作成する時は、マネージC++という拡張仕様で記述します。
また、従来のコードと.NETフレームワーク用コードを混在させてアプリケーションを
開発することもできます。これは、相互運用という形で説明されています。

ということですので、C++で習得したもの...続きを読む

QVC++6.0からVC++.NET2005へ移植

VC++6.0で作成したプログラムをVC++.NET2005に移植しました。
ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。
ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。
どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

Aベストアンサー

VC++.NET2005のエディションをお教えください。
Express Editionでは、リソースエディタがない、
ATL, MFCが使えないなどの制限がいくつか存在します。

また、VC2005などでは.NET Frameworkの開発が前提となっており
WIN32APIを使用する場合などについては、Platform SDKを
インストールする必要があります。


人気Q&Aランキング

おすすめ情報