おとなみ

おとなみ

色々考えたり、創作したりするブログ

【参考?】VC++10 ゲーム作成の時のノウハウ

 

■前書き

 ああ、生産的な事が何もできてない!

 サルトルのいう事では「別に生産性なくたっていいじゃん」ってあるけど、というか私もそれに賛成だけど、それでも心って厄介だよね。

 

 ということで、昔からやりたかったゲーム作るぞー。

 挫折しないのが目標だぞー。(それを言って6回目、つまりフラグともいう)

 

■自分へ、あと参考にする人へ

 更新型記事。どんどん変わっていく。

 そして、あくまで自分用。

 自分のスキルレベルの話だから省略されてたり、解釈違いあり。

 あと、君の初心が書いてある。何がしたかったのか読み返すのだ。

 

■開発環境

・OS Win8.1

 つまりLinuxとかMacの人はこの記事読むだけ無駄。

・マシンパワーは省略。多分この時代の人にその話はあんま関係ない。よね?

 なんか風のうわさで聞いたプログラム入門キットみたいな、品質の割に法外な値段取ってるやつでも多分できる。よね?

 PCのパフォーマンスについては私よりいいサイトがいっぱいあるから勉強してね。

 

■いいゲーム制作ツールがあるのに、時代錯誤に至った経緯

・wolfもSRPG StudioもRPGツクールもUnityも、コモンイベントだとか、3Dモデルだとかの使い勝手がいまいち分からない。(というか多分、理解するための向上心がない。さらに言えば3Dは別に興味ない)

 そして(多分勉強すれば出来るんだろうけど)、こう、なんていうか、カスタマイズの敷居が以上に高い。

 もっとプログラム的に全部手中に収めた状態でやりたい。(いや、DirectXもラップじゃんって思うけど、まだC++使えるならマシって考え)

 そんな感じ。

 

★★事前準備の参考にしたやつ

C/C++言語とDXライブラリでゲーム作成入門 - ポンクソフト

 但し、もうほとんどリンク切れなので2018年バージョンの手順を作る。

 

VC++10を用意

インストーラ

2018/8/18現在、VC++2010をインストールする方法はこれしか見つけられなかった。

インストール手順は途中の選択肢で外れているSP1を含めてた方が良いと思った。それ以外は適当。

http://download.microsoft.com/download/E/2/8/E2861714-77F8-4415-8524-AFCFEDDAA620/vc_web.exe

 

出典:visual C++ 2010 DLできない。 - 下記のサイトでDL出来るそうなんです... - Yahoo!知恵袋

 

・小話 使う理由

 UI的にVC++10が習熟してるから。(逆を言うとそれ以上は知らない)

 

DirectXの用意

・DXライブラリのダウンロード

DXライブラリ置き場 ダウンロードページ

 作りたいゲームの目的にあったものをダウンロード。

 例えば私は「3D」を捨てて、でもUI的に綺麗に見せたいなーっと何の知見もない「ソフトウェアレンダリング」を取り入れたやつをダウンロード。

 

・小話 ライブラリ(.libファイル)自身の適当解釈

 なんか既にプログラム組まれてて、その成果物をexeじゃなくってlibとして吐き出している。

 で、こいつらは使う側から見るとAPI(関数名とその機能説明だけある窓口)になってる。で、実は中身をDirectXみたいなすごいやつじゃなくて、自分達が作ってる適当なプログラムでもライブラリにできる。

 例えば、

ーーーーーーーーーーーーー

・ヘッダ名 benri.h

#pragma once //defiendとかundefとかのやつでもいい

void function();

・Cファイル名 benri.c

#include "stdio.h"

void function(){ printf("Hello hell.\n"); }

 

(※適当、コンパイル通るか分からん)

ーーーーーーーーーーーーーーーーーーーーーーーー

みたいなものを作って出力形式をlibにして、それを追加したプロジェクトでヘッダ「benri.h」をインクルードして関数functionを呼べば「Hello hell.」を表示するだけのライブラリ(.lib)が出来上がる。はず。

 ちなみに、dllファイルもダイナミックがどうたらある以外は同じと聞いたけど分からん。聞く前に面倒見のよい恩師がいなくなってしまったのでlibとdllの使い分けとかわからないまま生きてる。

 必要に迫られたら勉強するやつ。

 

 ■開発環境の整備

DirectXライブラリをVC++と結びつける

・小話 現状況の説明(VC++10インストール、DirectXライブラリのダウンロードで出来た状況)

 DirectXライブラリのダウンロードなので、現実世界でいうと「なんかしらんけど、どこかに、何かの図書館ができた!」って状況。もちろんPC内には友達も案内チラシもないのでたどり着けない。(いやまあ現実ならばしらみつぶしにって方法もあるけど、こっちは無理ということで…)

 なので、図書館を設置する場所、そこまでの道を自分(VC++)に覚えさせなきゃならない。

 

・図書館を設置する場所(DirectX置く場所)

 図書館、どこにでもあっていいけど、身近がいいよねー。

 ということで、Cドライブ直下になんでもいいので名前つけて保存。ただし、念のためにファイル名は全部半角で空白も使わない事。本記事では「00_DirectX」とする。

 設置完了!

 なのだけれども、私は置いた場所を忘れるので、「00_Direct」フォルダを「仮想ドライブ」として扱っていく。以後もその体で話していくので頭の中で置き換えてね。

 ということで「仮想ドライブ」の話。

 

・小話 仮想ドライブ

 「Cドライブ」とか「Dドライブ」とかあるじゃん?

 あれと同じレベルにドライブを作る。と言っても「仮想」なので、実体は今回の話であればさっき作った「C:\00_Direct」フォルダであり、パーティションを切り分けられる*1訳はない。

 イメージとしては「Zドライブ」*2というドライブレベルでの「C:\00_Direct」へのショートカットを作る感じ。

 実は今回で言えばかなりありがたみ薄い。でもパス名が馬鹿みたいに長くなると、主に後述するライブラリを追加するところでじわじわ効いてくる。ので知ってて損はないと思う。

 

 ・小話2 仮想ドライブのつくり方

 みんな大好きbatファイル(コマンドプロンプト)を作ってやります。

 仮想ドライブの名前はさっき適当に言った「Zドライブ」としましょう。

 手順。

 ①なんかtxtファイルを立ち上げます。

 ②txtファイルに次の文字を打ち込んでください。(※文字コードは必ずS-JIS

   subst z: C:/00_DirextX

  念のため、この後にエンターして改行してね。(EOFとかいう奴でごたごたする可能性があってこわい)

 ③②のファイルを「名前を付けて保存」で「Zドライブに切り分けるやつ.bat」と名前を付けて保存。

 ④とりあえずできているかの確認でその「Zドライブに切り分けるやつ.bat」をダブルクリック。そして、Cドライブとか表示されてるところに戻って、そこにZドライブが存在してたら完成!

 ちなみに仮想なので、Zドライブの容量はCドライブと一致してるよ。

 

・小話3 仮想ドライブの永久化

 さて、実はもういっこやらないといけないです。

 なんと今作った「仮想ドライブ」はPCをシャットダウンすると消えます。つまりまたbatファイルをダブルクリックしないといけません。

 面倒…。

 ということで起動毎に自動で仮想ドライブ作る様にします。

 ①「Zドライブに切り分けるやつ.bat」を

C:\Users\[ユーザ名]\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup

  に放り投げます。[ユーザー名]は最初に決めた自分の環境の名前。

 (AppData無いぞ!って人もいるかもしれない。というのもAppDataは隠しフォルダだから。↑の奴コピーしてユーザー名変えてエクスプローラに直接叩くか、もしくは隠しフォルダを見れるようにするか。方法は…がんばれ!)

 

 ②再起動してみて、Zドライブができていたら完成!

  (ちょっと時間かかる。2分くらい待ってできてなかったら場所を間違えてる)

 

 紐づけへの下準備はこれでOK

 

VC++2010プロジェクトとDirectXライブラリの紐づけと、サンプルの起動

↓これの2以降をやる(ライブラリの場所は「Z:/00_DirextX」と読みかえる)

DXライブラリ置き場 使い方説明

気をつけなきゃいけないのは、2のcppファイルの作成を飛ばさないこと。

えらい目にあう。

 

・終わり

 これでサンプルプログラムが動いたのを確認できたと思うので、あとはDirextXの機能を用いてゲームを作成していくんだけど、今日は眠いのでここまで。

 

 ■ゲーム作成ノウハウ

・★★作成していく中で追記予定★★

・愚痴(暫定文書)

 どうでもいいけど、昔、一番末端の末端の機能を担当したとき、上がレビューしてくるAPIの仕様書が「暫定」という文字で埋まっていたり、コード見ても「上が出来ていないので暫定コード」みたいなのを見ると、「それ見せられて何になるの…?」って気持ちになるよね。

 というか言うよね。そして上から「いいからやって」っていわれて、それに合わせてやってると、何の前触れもなく仕様が変わってコンパイルすら通らない出来事が起こるよね。というか覚えてるだけで4回起きた。なんじゃこりゃ。

 技術者って技術よりもまず筋を通す事を覚えたほうがいいよ。絶対。

 

*1:CドライブとDドライブを分けるときにやった容量の境界を決める作業の事。してない人はごめん。今現役で使い続けてきた人がこれをやるとリスク高いけど、これをやるメリットとして、Cドライブが全部消える事が起こっても、Dドライブに分けておけばDドライブは無事だったりするのでやった方がいいかも。その判断は任せる

*2:名称は適当