2008-09-01から1ヶ月間の記事一覧

awkが楽しい

仕事ではじめてawk使いました。プロジェクトファイルとソースファイルを定型的に処理するスクリプト。例えばC++ソースファイルの#〜を削除するだけであればこんな感じ。 #!/bin/gawk -f BEGIN { } $1 ~ /^#/ { next; } { print($0); } END { } 実際にやった…

スレッドの作り方

C++

なんだかスレッドの調子が悪いな〜。動作が不安定。って思ってたらCreateThreadを使ってるのが原因だった。 Windowsでスレッドを作るには_beginthread,_beginthreadex,CreateThreadの3種類の関数がありますが、_beginthreadexを使うのがベターらしい。Creat…

squirrelとc++の速度比較

#pragma optimize("",off) static void dummyfunc(){}//最適化抑制のための関数 #pragma optimize("",on) struct Foo { int num; Foo() { num = 0; } void inc() { ++num; dummyfunc(); } }; Foo foo; for(int Li=0;Li<1000*1000;++Li){ foo.inc(); } O2でビ…

squirrelのデータをC++から簡単にアクセスする

モデルのポリゴンデータを.nutで記述するつもりなので、手始めにsquirrelのデータへのアクセスを容易にするためのオブジェクト&イテレータを実装してみた。 return { NAME="カイン" JOB="竜騎士" EQUIP=["グングニルの槍","クリスタルアーマー","リボン"] }…

仮想関数ポインタは4バイトとは限らない

c++

呼べました。なんてあっさりと。。。スタック上の値が0だったりCCだったりしたのはポインタのサイズが違ってて4バイト以上の余り部分が初期化されていないからなんでしょうね。これをsquirrelに組み込んでみます。いままでuserpointerの自由変数でやってた…

squirrelへのクラス登録、仮想関数テーブルがあるとNG

ベクトル組み込みはできた。コンストラクタによくあるオーバーライドに関してはメソッド名を変えることでスルー。他のクラスを登録しようとしたら、キャストにミスってるらしくvfptrがあるとうまくメソッドが呼ばれない。あとちょっと。。。 2008.09.16 追記…

ゲーム開発のコツ

うちでは常套手段としてよくやるんですけど、モニタ(テスターとも言う)にチェックしてもらうときにハングアップしたときの例外ひろってそのときのメモリダンプ、コールスタックダンプなどを退避、オフラインでマップファイルからシンボルに展開してweb…

squirrelへのクラス登録、引数と戻り値にC++型を使えるように

忘れてた。 class model { void setvisible(bool flag); bool isvisible() const; }; class loader { public: model& loadmodel(const char* path); }; vm.creg<model>("Model") .variable("visible",&model::isvisible,&model::setvisible); vm.creg<loader>("Loader") .fu</loader></model>…

多人数ゲーム開発のコツ

いま仕事で作ってるゲームのビルド警告があまりに多いので1台空いてるマシンにループビルド環境を作って定期的にメールで警告一覧をプログラマ全員に送りつけるようにしてみた。しかもグループごとの警告数比較付き。 そしたらあら不思議。見る間に警告が減…

consttable

consttableの存在がよくわからんかったのでここにメモしておきます。 enum hoge { one=1, two=2, san=3, }; const uuu=11; このenumとconstはroottableやregistrytableと並列に存在するconsttableへスクリプトコンパイル時に蓄えられます。ここでわからない…

続squirrelへclassバインディング

http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?rev=52&root=shive&view=rev だいぶできた。 //クラスを登録 creg<aaa>(hvm,"aaa") .function("getstatic",&aaa::getstatic) .function("somemsg",&aaa::somemsg) .function("getname",&aaa::getname) .function("</aaa>…

squirrelへclassバインディング

http://svn.sourceforge.jp/svnroot/shive/junk/diary/2008/20080906-test001.cpp 簡単なclassバインディング書いてみた。関数のオーバーロードとかちゃんとやるべきだろうか。必要になってから考えよう。メンバ変数へのアクセスも対応したいなぁ。

Google C++スタイルガイド

http://www.henshi.net/k/hiki.cgi?GoogleCppStyleGuide 例外を使わないようにしてるのは意外だった。書いてることが細かすぎる気がする。推奨だから別にいいんかな。 それはそうとは悪だ。なんでuintとかGetObjectとかdefineしとんねん。あれはいつになった…

squirrelの構文習得

http://svn.sourceforge.jp/svnroot/shive/junk/diary/2008/20080906-test100.nut 構文習得がてらつらつら書いてみた。luaもC++も好きなので気持ちがいいです。早くゲームに使ってみたい。 以前luaを使っていたときにもすでにcoroutine(fiber)の仕様はあった…

squirrelのsjis対応

http://svn.sourceforge.jp/svnroot/shive/junk/diary/20080904/sqlexer.cpp ReadStringで文字列をパースしているようなので、leadbyteが来たらもう1文字を連続して読むように変更しました。ちゃんとエラーチェックしないとごみデータを渡したときにおかし…

svn:externalsが相対パスに対応 svn-1.5.x

svn

http://subversion.tigris.org/svn_1.5_releasenotes.html#externals英語ちゃんと読んでなくて気づかなかった。subversion-1.5.xからsvn:externalsが相対パスに対応した。待ってましたよ、この機能!ようするにリポジトリ上のシンボリックリンクが使えるよう…