結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

プログラミング

暗号化等が施されたLuaファイルの読み込み方法

今回はファイル読み込みのお話です。暗号化の話ではないのであしからず。通常Luaファイルの読み込みは、以下の関数やマクロを使用して行います。 luaL_loadfile(L, filename) luaL_dofile(L, filename)テキストで書かれたLuaファイルをロードする場合は上記…

Lua/Luabind/コルーチンの使い方まとめ その2

前回の続きです。今回は「コマンド実行」部分です。 コマンドとは? ここで言う「コマンド」とは以下のような1命令のことと定義します。 ・プレイヤーを移動させる ・所持金を増やす ・アイテムを増やす ・効果音を鳴らす ・ゲームのフラグ(変数)を操作する…

Lua/Luabind/コルーチンの使い方まとめ その1

最近、自作ゲームのスクリプトをLuaにシコシコ移植しています。そんなわけで今回は移植作業中に得た知識を備忘録も兼ねてまとめておきます。バインドにLuabindを使ってます。 LuaやLuabindのセットアップについては前の記事を参考にしてください。●C++で組み…

luabindをビルドする方法

ちょっと説明する順番が前後しますが、 今回はluabindのビルド方法を紹介します。LuaとC/C++をそのまま連携すると、いちいちグルー関数(C/C++とLuaの橋渡しをするための関数) を定義しなければならず、数が多くなってくると大変です。luabindを使えば、メン…

C++のゲームに組み込みスクリプト(Lua)を使用する その2

今回はC++から最低限のLuaのコードを実行してみます。 本格的に連携する前準備と言ったところです。使用するコンパイラはVisual Studio 2005 Professionalです。プロジェクトでリンクするライブラリに「lua5.1.lib」を 追加してから以下を行ってください。も…

C++で組み込みスクリプト(Lua)を使用する その1

最新版は5.1.4です。 ここではまず、ShiftJIS対応版の5.1.4を自作します。 5.1.3のShiftJIS版があるので、それを流用します。 ShiftJIS対応版5.1.4のコンパイルは以下のサイトで解説しています。 http://d.hatena.ne.jp/nao_19/20091128/luainsjis 5.1.4のソ…

C++では定数はヘッダではなくソースファイルに書こう

特定の意味をもつリターンコード等の固定値は ある程度1つのヘッダに集中して定義すると思います。 例えば、C言語ではマクロ変数を使用して以下のように定義します。 人によってはC++でも以下のように定義するかもしれません。 #define RETCODE_SUCCESS (0)…

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(4)

さてさて。 今まで何回か題名の話を書いてきましたが、 結局なにをやりたいかっていうと、 テクスチャを貼り付けた板ポリゴンがズレなく ドットがつぶれることなく(UV値を正しく算出する)描画することでした。 で、色々調べたり聞いたりしたところ 1つのイメ…

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(3)

すごく画面端にドットを打ちたい──! という希望とは裏腹に思った通りに ドットが打てない日が続いてます。こんばんわ。 前回800x600や1024x768にすれば丸め誤差の問題は 解消できるとか言いましたがウソです=□●_ 実際やってみましたが、結果は変わらず。 …

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(2)

前回の続きです。原因?がわかりました。 環境なんかは前回の記事を参照してください。 原因は頂点座標の丸め誤差によるズレでした。 ここ、当たりはつけてたのですが透視変換後の値が どうなるのか理解が足りてなかったので気づかなかったのですT◇T PIX f…

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(1)

基本的な方法は以下のサイトの通りなのですが ●スクリーンにある2D板ポリゴンを行列で操作する http://marupeke296.com/DXG_No51_2DBillboardWithOperatingMatrix.html 今ワールド変換行列の平行移動で、どのように値を指定すれば 画面四隅ぴったりに2Dオブ…

DirectXでテクスチャに対してレンダリングを行う方法

通常、DirectXで3Dオブジェクトをレンダリングするときの レンダリング先はIDirect3DDevice9デバイスを作成したときに 一緒に作成されたバックバッファになります。 今回はレンダリング先をバックバッファからテクスチャに 変更する方法を紹介します。 まず…

vectorで二次元配列

C++では、配列はvectorに比べて何一つメリットがないため 配列使うシーンでは必ずvectorを使えなんて言われています。 自分としてもvectorを使っていきたいのですが、 配列では簡単に宣言できたことが、vectorでは どう宣言していいかわからないなんてことが…

GetClientRect

GetClientRectのMSのページでの説明。 http://msdn.microsoft.com/ja-jp/library/cc364604.aspx 上記ページにはこのAPIの説明に >ウィンドウのクライアント領域の左上端と右下端の座標を返します。 と書いているが、これは嘘っぽい。 例えば、クライアント…

ディレクトリ(フォルダ)を再帰的に辿る方法

C#でちょっとしたアプリを作っているので、その過程で得た テンプレ的なコードを備忘録として書いときます。 あるディレクトリを指定して、その配下のファイル一覧を得たり、 ディレクトリがあったらさらに辿るような処理をしたい場合に使うコード。 using S…

Adobe Photoshopでdds形式を読み書きするためのプラグイン

なんか今更って感じがしますが、スゴク便利だったので紹介しておきます。 http://www.nvidia.co.jp/object/photoshop_dds_plugins.html#downloads

スコープ解決演算子(::)

この前後輩に聞かれたので書いときます。 【質問】 C++のプログラムで、Win32APIの関数名の先頭にスコープ解決演算子を付けているものがあるが、あれは何? 例 ::MessageBox( NULL, "Invalid Format", "Error", MB_OK ); 【回答】 答えは二つあります。 一つ…

enumの宣言方法でもんもん

以下のようにenum型を宣言している場合。 enum CharacterType { eUnknown=0, ePlayer, eEnemy, eItem }; switch文などで利用するときは以下のようにすると思います。 switch( type ) { case eUnknown: ... break; case ePlayer: ... break; case eEnemy: ...…

VisualStudioのパラメータヒントがうまく動かないときは

パラメータヒント(※)の情報は「.ncb」というファイルに入っています。 ソリューションファイル「.sln」と同じ場所にあるはずです。 VisualStudio6だと、プロジェクトファイルと同じ場所にある(はず)。 この「.ncb」が壊れていたり、読めなかったりした場合…

Boostを使ってstringをsplitする

Boost String Algorithms Libraryというものを使います。以下、文字列をsplitする例です。「,」をデリミタとして使います。 #include <iostream> #include <string> #include <vector> #include <boost/algorithm/string.hpp> using namespace std; int main() { string strTarget = "left,right,,one,two"; vector<string> </string></boost/algorithm/string.hpp></vector></string></iostream>…

ほげほげローダ

自分は普段から自作ゲームを作っているのですが そこでよく登場するのが、ローダ。マップローダ、イベントローダ等。 ディスクやメモリからデータを読み、プログラムで使用するメモリ領域に データをセットする役割を持ちます。 このローダの実装方法ですが…

プライバシーポリシー お問い合わせ