ゆとりーなの日記

日記的な事を書いて行くと思はれる

Win32

ゲーム用空󠄁のウィンドウテンプレ

DirectX等を使󠄁ふゲーム用の空󠄁のウィンドウを表示するテンプレ。 #define OEMRESOURCE #include <Windows.h> LRESULT CALLBACK WindowProcedure(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: re</windows.h>…

Win32APIとBoostだったらBoostの方が好き...だけど

個人的にはthreadやらfilesystemやらはWin32APIを直接叩くよりは遥に使いやすい様な気がします。C++のライブラリなのでRAIIとかで管理されていたり函数オブジェクトが渡せたりとC++との親和性も高いです。ついでに標準ライブラリに近い名前付けで目にやさし…

闇鍋勉強会で発表してきました

というわけで3/31(土)に某八王子の方で開催された闇鍋勉強会で怪しい発表をしてきました。内容はDLLインジェクションやらAPIフックやらとなってます。発表時にコードの中で抜けてた部分があったりしたので若干の修正があったりしますが取り敢えずスライドを…

WM_PAINTで例外を投げたら残当したでござる

WM_PAINTで例外対策にBOOST_SCOPE_EXITを使って描画中に例外が飛んでもちゃんと描画終了するようにしたぞと粋がっていたら思わぬところから伏兵が現れました。 // 適当なプロシージャの中身 case WM_PAINT: { BOOST_SCOPE_EXIT((&hwnd)) { // たまたまDirect…

使い方間違ってたらすいません

いままで何も考えずに、 throw std::system_error(std::error_code(GetLastError(), std::system_category())); とか書いてたんですが、どうもこれが上手く動かないみたいです。実際に例外catchしてからwhat()してみても何も表示されません。 throw boost::s…

この期に及んでWin32APIとXlibAPI

昨日全ゲ連に行ったわけですよ。懇談会で名刺を幾つか頂いて、そこに載っているTwitterIDをフォローする作業を行うわけです。さて、ここでありがたいことにフォロー返しを頂いたとしましょう。ここの日記の在り処を私のTwitterのプロフィールのところに貼り…

Win32API入力特集

題名の通りです。Win32APIを使ってゲームで使うであろうキーボードの入力に関するごにょごにょです。Win32を使うとなれば、関数を使ってキーの状態を毎フレーム毎に確認していく方法とメッセージを使ったコールバック的な方法の二種類が考えられると思います…

フォグを切りたいならこれでいいんじゃなイカ?

こっそり書いておきます。こっそりです。 取り敢えず適当にフォグをかけるサンプル"test_fog.exe"を作ります。 #include <memory> #include <Windows.h> #include <d3d9.h> #include <d3dx9.h> namespace std { template <> struct default_delete<IDirect3D9> { void operator ()(const LPDIRECT3D9 ptr) con</idirect3d9></d3dx9.h></d3d9.h></windows.h></memory>…

win32やDirectX由来の型を外に出すことにたいする抵抗

現在制作中のゲーム製作用ライブラリですが、DirectXベースで開発しているのでどうしてもwin32やDirectX由来の型を使用させることを強要してしまうのが現状です。座標とかにはD3DXVECTOR3を使わせたりとある値を指定するときにDWORDを使わせたり・・・。 D3D…

英語嫌いっぷりが異常だからという理由で精神科に連れて行かれたということは内緒

前々回ゲームにおけるメイン関数の書き方について審議したような感じがしますが、今回はゲームメインループをどうするかについて審議することになる感じです。 win32を使ったアプリケーションでは、多分例外なく次のようなメッセージループを書く必要があり…

なんかつい最近に失恋した気がするけど既に脳みそはプリプロセッサによってC++に置換され始めている

後輩がゲーム製作(プログラミング部門)の進捗状況を話してくれました。つい昨日の事です。何やらウィンドウの生成までは行けたらしいのですが、なにやらメイン関数に全て詰め込んで書いてしまったらしく、つい私の十八番であるdisりが出てしまいました。 #…

なにかまちがえた?

win32APIにはOutputDebugStringという名の関数が用意されています。この子はデバッガのストリームに出力してくれる関数です。 #include <windows.h> int main() { const char * const str("Hello World!\n"); OutputDebugString(str); return 0; } これでデバッガ出力に</windows.h>…

期待したけど

VC++2010はラムダ式は使えるけどラムダ式から関数ポインタへの変換できないみたいです。できればこんなコードが書けるのではないかと期待したのに残念です。 class Window { public: Window() : window_handle_(initWindow()) { WNDPROC procedure([this](HW…

文字列メモ

文字列の描画は今迄はID3DXFont使ってたんですがGetGlyphOutline関数使ってテクスチャに文字列書き込んだ方が速い説が出てきました。しかもテクスチャに文字列書き込むと、拡大縮小、回転、3Dっぽい描画等の処理が図形や画像ファイルを描画するときと同じよ…

第10回〜ジョイパッド入力〜

前回はキーボード入力をやりましたが、ゲームなのにジョイパッド入力ができないとかないわ〜って言われないようにジョイパッドの入力もやっておきましょう。 ジョイパッドの入力にもDirectInputが使われることが多いのですが、前回言ったようにDirectInputの…

第9回〜キーボード入力〜

弾幕シューティングを作るんだから当然キー入力に応じて自機を動かすといったことをしなきゃいけなくなるわけです。というわけで今回はキーボード入力に関する内容です。 ゲームの入力にはDirectInputを使用することが多いみたいですが、これも例によってマ…

第4回〜文字列を描画する〜

四角形を書いたら文字も書きたくなるのが人情です。文字が画面に書ければデバッグ等もしやすくなりますし。 今回はID3DXFont*を使って実装します。他にも実装方法はありますが、私的にはこいつが一番手軽に文字列を書ける気がするのでこいつを使います。この…

第1回〜ウィンドウを表示する〜

これがDXライブラリとかなら一発なのですがwin32で作るとなるとなかなか複雑です。今回はこのウィンドウを作成する基盤となるアプリケーションクラスを作ります。 私の好みとして、メイン関数内にはアプリケーションの基盤となるクラスのインンスタンス生成…

C++とwin32とDirectXとBoostとLuaで作る弾幕シューテイング講座

はじめることにしました。これに合わせてソースコードが見やすくなるようにブログデザインを変えてみました。 私はアマチュアプログラマであり全て独学でやってきたので間違ったことや非効率なコードを書いてしまうことが大いに予想されます。なにかあればコ…

std::unique_ptrとstd::shared_ptr

なんかVC++2010だとstd::unique_ptrが使えたのでメモメモ。 std::unique_ptrといえば、boost::scoped_ptrがなんか知らないけど名前が変わっちゃったものという認識がありましたがstd::unique_ptrの方はカスタムデリータが使用出来るみたいです。std::shared_…

COMフック再び

新たなCOMフックの手法を試したところ成功したのでメモメモ。 目的のメソッドだけCOMフック 以前COMフックの手法をこのブログでも取り上げましたが、あれだとフックしたいメソッドは数個しかないのに、別にそのままの挙動で良いものまできちんと書かないとい…

まあポインタってそういうものだよね

私のポインタに対する認識はまだまだ甘かったようです。まあでもポインタが何なのかを突き詰めて考えればそういうことも出来るよな〜って感じですね。今日はC++でポインタを使った黒魔術を紹介しましょう。 ポインタの再確認 まずはポインタがどういうものか…

ページビュー10000越え記念

中何回が自分でまわしたものなのか気になるところです。 ページビュー10000越え特別企画「自分で作った多重起動を自分で潰す」 何という不毛な特集。私が解析にハマっているせいです。何をやるかはタイトルの通りです。自分で多重起動防止のプログラムを書い…

みんなマイクロソフトが嫌いなの?

昨日は雪降りました。積りました。雪かきの流れです。たまにやる雪かきは楽しいですね。あと今日は都合によりC++でシューティング作りますか第1回ではありません。第1回がいつ行われるかは未定なんです。 またタイトルと記事内容が一致しているぞ ひょっとし…

早速対応

非想天則のver1.10パッチが出ましたね。なんか色々新しい要素が追加されたりバグ修正が行われたりと盛りだくさんの修正パッチらしいですが、我々世紀末勢にはそんなことどうでもいんです。一番気になるのは色んな値が保存されているアドレスの変動についてな…

久々の以下略

ようやく時間が取れたので前回のフラグの回収作業に入ります。まあDirectXを使っているゲームに好きな絵を表示させることが出来るであろう技術のやり方です。当店では東方非想天則に七星ゲージを表示させることに成功しております。 手順1 APIフック 今回は…