ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

VisualC++

MFCが無い

VisualC++でちょっとしたテストコードを書いていて、MFCの関数を使おうとしたらエラーに。 よく考えたらインストールしてあるのはVisualC++ 2010 Express。Win32 APIが使えるPlatform SDKは入っているけど、MFCは入っていない。ということで断念。 ちょっと…

別のエディタで編集された変更を読み込む

VisualC++はプロジェクトをビルドするときとデバッグするときのみに使い、ソースファイルの編集は自分好みのエディタで行っている。このようなとき、外部のエディタで編集されたソースをVisualC++のほうでも反映させるには次のように設定すれば良い。 1.ツー…

ソリューションを別名で保存

DirectXのサンプルプログラムを変更して以前の自分用のフレームワークを移植することにした。そのため、ソリューションやプロジェクトファイルの名前の変更を以下のようにしておこなった。 ・ソリューションフォルダの名前を変更 ・ソリューションファイル(.…

UNICODEのCStringからchar*への変換

文字セットがマルチバイトではなくUNICODEになっているときにCStringからchar*へと変換する方法。 例えばファイルのダイアログボックスで取得したファイル名をchar*型で受け取る関数へと渡すような場合。 コードは次のような感じ。 CFileDialog fd; CString …

C++で作ったDLLをC#のアプリケーションでデバッグする方法

C++で作ったDLLをC#で使うにはDllImportで宣言すればよい。 using System.Runtime.InteropServices [DllImport("kernel32.dll")] extern static bool Beep(uint dwFreq, uint dwDuration); via http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32a…

cl.exeのコンパイルオプション

cl.exeを使ってコマンドラインでコンパイルしようとすると、次のようなwarningが出てしまう。 C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(326) : warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効には…

コマンドラインでコンパイル

VisualC++ 2005 Express Editionがインストールしてある環境でコマンドラインでコンパイルを行う方法。 まずは環境変数を設定するためにVisualC++がインストールされているフォルダのbinにあるvcvars32.batを実行。デフォルトでインストールしたのなら、C:\P…

仮想キーコード

GetAsyncKeyStateではキーの判定に仮想キーコードが必要になる。C++なら定義されているヘッダをincludeすればよいが、C#でDllImport属性で宣言して使う場合にはそうはいかない。 ということで、使いそうな仮想キーコードをメモ。 #define VK_RETURN 0x0D #de…

コマンドラインでビルド その2

うまくコンパイルが出来なかった原因が分かった。やはりPlatform SDKへのパスが正しく設定されていなかった。 (1)環境変数の設定 インクルードファイルがあるパスを環境変数 INCLUDE に、ライブラリファイルがあるパスを環境変数 LIBS に設定する。 (2)環境…

コマンドラインでビルド

VisualC++でコマンドラインでビルドを行う方法。 (1)パスと環境変数の設定 VisualC++がインストールされているフォルダのbinにvcvars32.batというバッチファイルがあるので、これをコマンドプロンプトで実行する。これでパスと環境変数が設定される。 (2)VCB…

マップファイル

マップファイルとは作成したプログラムのメモリや関数のアドレスが書かれたもの(でいいのかな)。どの位置にどの関数があるかとか、どのくらいスタティック変数で領域が取られているかとか分かる。 VisualC++ではプロジェクトのプロパティに設定項目がある。…

コーディングテクニック

サンプルプログラムを見ていたら、「え?これでコンパイル通るの?」と思ったコードがあった。今まで自分では書いたことの無いタイプのコードで非常に違和感があった。で、よくよく調べてみたら、確かに正しいコードだった。なるほどねぇ、こういうテクニッ…

本のサンプル

弾のエフェクトがうまくいかないので、「シューティングゲームアルゴリズムマニアックス」のサンプルを参考にしようと付録CD-ROMのプログラムをインストール。 サンプルプログラムのプロジェクトは.NET2003用でExpress Edition用ではなかったので変換。Expre…

アラインメント

BITMAPFILEHEADERを使って読み込んだBMPファイルの構造を調べようとしたらうまく値が取れなかった。それはアラインメントが原因と分かった。調べてみたところアラインメントを調整する #pragma pack という命令があった。 #pragma pack(push, 2) // アライン…

ファイルサイズを取得する方法

fopen_sでオープンしたファイルのファイルサイズを取得するには、fseekでファイルポインタを終端に移動して、その位置をftellで取得すれば良い。このままファイルに対して作業するなら、fseekでファイルポインタを先頭に戻しておくことを忘れずに。 FILE *fp…

fopen_s

Visual C++ 2005 Express Editionではfopenを使うと"古い形式として宣言されました"とwarningが出る。ヘルプを見ると代わりにfopen_sを使えとある。セキュリティが強化されたバージョンとのこと。 fopen_sはfopenとは関数の引数と戻り値が異なる。関数の引数…

BMPファイルの読み込み

ツールはBMPファイルを読み込んでPNGファイルを出力する予定なので、BMPファイルを読み込むルーチンを作成。 まずはこのサイト(http://www.kk.iij4u.or.jp/~kondo/bmp/)を参考にBMPのファイルフォーマットを調べる。 Visual C++ 2005 Express Editionではfop…

PNGコンバータの作成

libpngが出来たので、これから実際のコンバータを作成。 参考にしたのは、このサイト。(http://www5.cds.ne.jp/~kato/png/) まず、Visual C++で空のコンソールアプリケーションを新規作成。そこにサイトに掲載されていたサンプルプログラムをコピーして作成…

libpngの作成

zlibに引き続き、libpngをビルド。 lpng1212.zipを解凍し、VisualC++ 2005 Express Editionで、projects\visualc71\libpng.slnを読み込む。「Visual Studio 変換ウィザード」でバックアップを作成せずに完了を選ぶ。 プロジェクトを見るとzlibのソースを参照…

zlibの作成

アルファ付きPNGを作るための満足いくグラフィックツールが無かったため、勉強もかねて自分でコンバータツールを作ることに。 PNGを扱うためのフリーのライブラリ「libpng」があるのでそれを利用。libpngはzlibを使うのでまずはzlibをメイク。 PNG Source Co…

ジョイスティックを使う方法その2

ボタンが4つより多いジョイスティックの場合は、JOYINFOの代わりにJOYINFOEXを利用する。基本的な使い方は変わらないが、JOYINFOEX構造体のdwSizeとdwFlagsの値を必ず設定しなければならない。 JOYINFOEX JoyInfo; JoyInfo.dwSize = sizeof(JOYINFOEX); Joy…

ジョイスティックを使うときの注意

昨日の日記でWin32アプリケーションでジョイスティックを使う方法を書いて動作確認をしたのだが、ひとつ気になる点が。 PCにPS2のコントローラーをつなげるアダプタを使って確認したのだけれども、このアダプタの種類によってボタンの配置が異なっていること…

ジョイスティックを使う方法

Win32アプリケーションでジョイスティックを使うにはDirectInputを利用する方法もあるが、JOYINFOを使うともっと簡単にできる。 #include "mmsystem.h" #pragma comment(lib, "winmm.lib") JOYINFO JoyInfo; if ( joyGetPos(JOYSTICKID1,&JoyInfo) == JOYERR…

GetAsyncKeyState

Win32アプリケーションでリアルタイムでキーボードの入力を取りたいときには、GetAsyncKeyStateを使えばよい。DirectInputを使う方法もあるが、そこまでこったものにする必要は無いときにはGetAsyncKeySateのほうが手軽に使える。 たとえば、スペースキーが…

OutputDebugString

VisualStudioでWin32アプリケーションを開発していると、デバッグ用文字列の出力にはprintfが使えない。その代わりに、OutputDebugStringを使用する。 OutputDebugString("test\n"); これでVisualStudioでデバッグ実行時に出力ウィンドウに文字列が表示され…

Visual C++ 2005 Express Editionで開発したソフトをVisualStudioがインストールされていないPCで使う

Visual C++ 2005 で作ったソフトをVisualStudioがインストールされていないPCで使おうとしたら、 「このアプリケーションの構成が正しくない ため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決す…

Visual C++ 2005 Express EditionでWin32アプリケーションを作成する方法

VC++を入れただけではWin32アプリケーションは開発できない。開発するためにはMicrosoft Platform SDKをインストールする必要がある。 ここに手順を書こうと思ったら、マイクロソフトに分かりやすくまとめられたページがあったので、そちらをリンク。 http:/…

キーバインドの変更

VisualStudioの環境で気に入らなかったのがテキスト入力のキーバインド。普段Emacs系のエディタを使っているのでキーバインドがまったく異なるので非常に使いづらかった。たとえば、Emacs系では一つ上の行へ移動するのにCtrl+Pを使うのだが、これがVisualStu…