メモ

ツールっぽいものを作る

ずいぶん久々になってしまいましたがまだまだ頑張ります。しばらくは、サウンドプログラムの勉強も兼ねて、サウンド再生アプリ兼ツールを作成してみる。 ※ちょっと関連ある記事(d:id:p-tal:20091020) ということでまずは雛型作り。簡単にウィンドウを出してE…

プリコンパイル済みヘッダーを使う

前回の記事(d:id:p-tal:20091111)に関連して。 共通で使用するマクロやtypedef、includeファイルなどはプリコンパイル済みヘッダーとして中間ファイルにしておくと、それらを参照しているcppのコンパイル速度が劇的に速くなる。 使い方は簡単で、(1)まとめて…

とにかくincludeする

どんなプロジェクトでも使用するtypedefやマクロなどは、全ファイルにincludeしても構わないのでは・・・という点から、それを便利に行う方法を模索。『プロパティ > 構成プロパティ > C/C++ > 詳細 > 必ずインクルード』の部分にファイル名を入れておけばOK…

#ifと#ifdefの違い

#if (x) … x が true なら実行される #ifdef (x) … x が #defineで定義されていれば実行される 実際にプログラム上で使用する機会はデバッグ表示の有無なんかがほとんど。 なお、Visual Studioの場合はDebugモード時に自動的に 「#define _DEBUG 1」 が定義…

DLLを作る

libファイルの作成はできたので、次にDLLを作成してみる。 まずはプロジェクトを作り、DLLの項目にチェック。 通常と同じようにヘッダを作り、出力したい関数に「__declspec(dllexport)」を加える。 クラスの場合はクラス名の前に「__declspec(dllexport)」…

libファイルを作る

ランダム数値の生成とか、今までcppのまま持ってたのをlibにしてみることに。まずlib用のプロジェクトを作成。cppとヘッダを入れてビルド。DebugフォルダかReleaseフォルダにlibファイルが生成される。この際に出力フォルダ、ファイル名を指定しておくと便利…

現在のインスタンスハンドルを取得する

windowsプログラミングをしてるとたびたびインスタンスハンドルやウィンドウハンドルが必要になってくる。たとえばゲームシーンでのみポップアップメニューを出したいとして、その時にHINSTANCEが必要になってきたり。 グローバルで置けばいいような気もする…

右クリックでポップアップメニューを表示

アプリケーションの右クリックでポップアップメニューを表示してみることに。↓こんな感じ まずは表示したいメニューをリソースから作成。 (ソリューションエクスプローラの「追加」→リソース→Menu)一番上は実際には表示されないので、ダミーということで。…

fpsと処理率

FPSを60に調整。前フレームの終了時の時間を保存し、今フレームの最後でその終了時の時間+(16ms)になるまでSleep。 正確な60fpsではないけど、これで一応OK。 void adjustFPS() { // 終了予定時間 DWORD endTime = m_prevFrameFinishTime + 16; // 予定時間…

Unicode対応のプロジェクトにする

新規プロジェクトを始めるにあたって、プロジェクトをUnicode対応にすることに。 基本的にchar型を使っていた場所でエラーが出るので、文字列の前に_TまたはLを入れればOK。 #include <tchar.h> // ----------------------------------------------------------- // </tchar.h>…

Visual Studioのデバッグ機能

開発環境はVisual Studio 2005 を使用しているのだけれど、今更ながらデバッグ機能優秀ぶりを実感することができたので、メモ。■ 変数の値を直接変えられる ウォッチ式から直接代入ができると。 const値は変更できないっぽい。 ■ 編集およびビルドの再開 ゲ…

RawInputで複数のマウスからの入力を取得する

RawInputの勉強。ようやく二つのマウスからの入力を取得できるようになった。 まずは初期化。 #define WINVER (0x500) // RawInput用 #define _WIN32_WINNT (0x0501) // RawInput用 #include <windows.h> … void init() { // 現在接続されている入力デバイスの数を取得 </windows.h>…

マウスを二つ接続する(2)

d:id:p-tal:20090829の続き。通常はマウスを二つ接続したところでそれぞれの入力はあたかも一つのマウスだけがあるかのように処理される。 これはWindowsの仕様っぽい?どうやらDirectInputも同様のようで、マウスが複数あること自体がそもそもおかしい事の…

Structure Synthで簡単3Dアート

Context Free の3D版、Structure Synthをいじってみた。Context Freeについては以前使ってみたので、(d:id:p-tal:20090805) 使い方はほぼ同じのStructure Synthでも結構楽に作成できた。 また、レンダラーのsunflowを使うと良いみたいなので、さっそく導入・…

空間分割による衝突判定

今までアクションゲームを制作してきたときには、いつも衝突判定時の処理落ちに悩まされてきた。そこで、4分木を使った衝突判定について勉強してみることに。まずは理屈を把握し、実際にコーディングしてみよう。 ※参考にさせていただきました。▼マルペケつ…

非アクティブウィンドウでもサウンドを鳴らす

ウィンドウが非アクティブでも音を鳴らす方法を探し、そして発見。バッファのフラグに DSBCAPS_GLOBALFOCUS を入れればいいのか。 DSBUFFERDESC DSBufferDesc; DSBufferDesc.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLVOLUME | ... ... ... DirectXで組…

パラメータは外部ファイルに

よくパラメータは外部ファイルで定義したほうが良いと聞くけど、いまいち利点が分からなかった。 ビルドの時間がいらなくなるということみたいだけど、まあそれくらい・・・って認識だったので。 でも最近になって自分なりに便利さがようやく分かってきた。 …

コンストラクタと初期化

Effective C++から学ぶ。 今まではコンストラクタで0に初期化し、初期化関数を別に設けてメンバの設定をしていた。 CTest::CTest() : m_num(0) ... { } CTest::init(int num, ...) { m_num = num; ... } CTest* p = new CTest(); p->init(10); 冷静に考えれ…

#defineマクロよりinline関数

Effective C++ 第二項より 今まではRelease()はマクロを使用していた。 #define SAFE_RELEASE(x) if(x) {(x)->Release(); (x) = NULL;} インライン関数のテンプレートで効率的にマクロのようなものが作れる。 template <typename T> inline void safeRelease(T& t) { if </typename>…