2008年07月12日

フイタ

今諸事情で入力事務系のバイトをやっているんだが…
どうにもそのバイト先のExcelVBAのプログラムがひどい。

いや、こないだちろっとデバグ中のを見たんだけどSelectCaseのCaseだけで40行くらい埋まってた…
高校くらいの時に友達が書いてたプログラム思い出したよ…
多分あれ入力データ形式の分岐だと思うんだが、正直配列使うなり作業用シート使うなりしろよとか思った、バグるよ?面倒くさいよ?

とも言わずぼーっと入力ができればいいのです。
posted by HAL at 11:58| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2008年01月29日

文字列描画実装完了。

やばい、遅い(苦笑)
初めて書く文字が40字程度あると一瞬かっくりいく。
変化する文字列、つまりメッセージの表示の時にどの程度つまるか試してみないと分からないけどねぇ…
一度描画した文字列ならば速いです、当然だけれどえらい速い。

アクションゲームならあれだね、画像で全部用意したらいいと思う。
文字列を大量に扱うRPGとかノベルゲームではどうなんだろう?
画面全体に文字を使っても数百字…でも一気に表示するのは重そうな気がする。
posted by HAL at 09:46| Comment(2) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2008年01月28日

解決策案。

こんな感じで一文字ずつ描画すればいいんではないだろうか。

codeはUINT型の文字コード、x,y,color,sizeは文字の座標・色・大きさ。
/*指定コードの描画*/
CDrawChar *pDrawChar;       //一文字描画用クラスへのポインタ
char name[NAME_SIZE]; //検索用文字列
vsprintf_s( name, NAME_SIZE, "Char%d%d", code, size );

pDrawChar = FindDrawChar( name );
if( pDrawChar == NULL ) //検索がヒットしなければ作成
pDrawChar = CreateCDrawChar( code, size );

pDrawChar->Draw( x, y, color ); //文字列描画
/*終了*/

面倒くさいのはCDrawChar* FindDrawChar(char*)を作るところか。
実行速度がどれくらい出るかは不明、作ってみて試してみないとなぁ。
後、一文字描画クラスが登録数を超えた時の挙動が問題。
古い順に消すか優先順位をつけて消すか。
まぁスキル的に前者を取るわけだが。。。。
posted by HAL at 23:54| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2008年01月27日

文字列表示が思いのほか難しい。。。

C言語の入門の入門ではHello Wold!をやるわけだが、
ゲームプログラムだと意外にこれが難しい;;;

DirectXに用意されている文字列描画用にID3DXFontを使えば、実装は楽なんだが。
でもこれを使うと毎回裏で文字をガリガリ1ドットずつ書くらしく遅い。
したら自分で上手いこと毎回書かないですむようなプログラムを書こうと思うわけだ。

んで、結局のところ文字一個を表示するプログラムは作れた。
が、どうやって文字列を表示するかで頓挫。
文字一個表示だって相当面倒くさかったのにさらに面倒くさい。
作ってしまえば後は楽になるんだけどねぇ…

今のところ出来上がったプログラムは「a」の文字がひたすら移動するだけ。
なんだかなぁ。
posted by HAL at 23:17| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

入力処理系統を実装。

ジョイスティック一本にキーボードからの入力を受け付けられるように。
しかし静的にボタンを配置しているのでボタンの設定変更は不可能。。。
キーボードの配置は静的でも困らんがジョイスティックは困るかも??
今後拡張する方向で、とか言ってるとやらないわけだが。

とりあえずボタンの数が少ないのをいいことにswitch-caseで誤魔化した。
あんまりソースが綺麗じゃないのが気になるんだよなぁ…
下ボタンは矢印下とテンキー2とパッドの下ボタンって関連付けとかをどうにか綺麗に処理できないものか。今の処理は適当すぎる…

https://www.microsoft.com/japan/msdn/directx/techart/Directinputmapper.aspx
というわけで探してみたわけだがここいら辺りでいいのかな?
なんかあんまりアクションマッピングでどーこーって話を見ないんだよなぁ。
まぁ別段ものっすっげーーライブラリを書くわけじゃないからいいか。
気が向いたらやると言う名の完全放置。

あ、ついでに探しててこんなの見つけた。
http://www32.ocn.ne.jp/~katakana/directx/dappw1.html
はらいてぇ

さて、明日はアレだ、文字描画部分を作ろうと思いますorz
posted by HAL at 04:27| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年09月11日

スキンメッシュ実装しました。

というわけで3Dゲームの下地が出来ましたよ、と。

結局本を買ったわけですよ、一冊。
ネットだけじゃちょっと無理でした、気合の面で。

ところでこの本、メモリの開放漏れが酷いんですが。
自分のプログラムが3箇所くらいメモリリークしててうぇーとか思ったら
サンプルだと軽く20箇所以上メモリリークしてるでやんの。

いや、素人目にも開放処理が酷かったのは確かなんだけどさ;;;
教則本もはあてにならんね、自分でちゃんとやろうo rz


---追記
朝飯食ってコード見直してたらメモリリーク発見。
不必要なところで参照カウンタを一つ増やしてましたよと。

て言うかマジサンプルありえない。
そういうところに力を入れていないとは言え大き目のモデルを読み込むと
プログラム実行ごとに1MB弱のメモリリークとかね。
複数のファイルを読み込んだら一体どうなるのかと。

まぁ、これで安心して次のステップにいけますorz
posted by HAL at 08:26| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年09月05日

クォータニアン代数

挫折、理解できません。

プログラム上での最低限の使い方は理解した。
虚数単位の拡張版らしく、クォータニアンとは

q=s+tI+uJ+vK(s,t,u,vは実数)
or
q=<s;V>(sは実数、Vは三次元の位置ベクトル)

で定義される数らしい。ただしこの時

I*I=J*J=K*K=I*J*K=-1

とする。
三種類の虚数単位と実数で表されたこの数は四元数とも呼ばれる。
これにしっかり則って計算すると一定の法則でもって掛け算が定義できます。

詳しい説明が全くもって意味不明だったのだが最終的にこう定義すると
点の任意の軸周りの回転を簡単に表現できるらしい。

例えばある点Pをrに関してθ回転させる式は

P=<0;Vector(P)>,Q=<cos(θ/2);sin(θ/2)Vector(r)>,Q*=<cos(θ/2);-sin(θ/2)Vector(r)>として、
P'=QPQ*

で表せる、これならPCで計算させるのも楽ちんですね。
二つに分ける理由はあまりちゃんと理解できなかった。

しかしハミルトンさん(?)が考えたらしいんですがよくもまぁ…
ガウス平面を三次元に拡張できたら嬉しいのにと思いはしたが
よくよく見つけたものですね、すげーー。
いや、何が嬉しいかっていうと一定の計算法則でもって
複雑な移動処理を実装できるのがすばらしいと思うわけです。
ポイントは回転と拡大と位置が同じ『数』で表せるところにあるんだとか。

まぁ理屈はよくわからんのだけどね。
とりあえず回転だけは使えるようにしておいたのでいいかなぁと。
応用するとキャラクターの姿勢制御が楽チンみたいです。
一回作っちゃえば別に数学の中身なんて理解しなくてもいいんだけどさ。

いや、久々にこー数学が面白いんだが頭が弱っててうぇっうぇww
posted by HAL at 23:56| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年08月30日

逃避行なプログラム

感情が停滞するとにわかに理性が活発になるのでプログラム中です。
要するに現実逃避。

数日かけてようやっとグラフィック、インプットとオーディオの基礎完成。
つか今回はしっかりと基礎を作っているので流用可能な形に。
他人の作ったライブラリを使ってもよかったんだけれどもそれは意地。
折角作るなら自分で一から作ったほうがどうせ個人用なら使いやすいし。

もうしばらくしっかり作ったら3Dシューティングっぽいものでも作ります。

なんて言っても多分描画の部分で一月くらいかかるんだろうがorz
気長に行きます、毎年少しずつレベルアップ中です、年単位なんです。

とりあえず、クォータニアンから勉強します。
posted by HAL at 05:24| Comment(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年03月18日

頭遺体

知恵熱。
プログラムのバグ取りに約4時間ほどフォーラムを周りまくって疲れた。
本場の英語サイトはよく分からん表現が多い、音楽系よりマシだけど。

VisualStudioが6→7,8になった時に仕様変更が多々あったらしい。
例外とかWCharとか、面倒くせ。

クラス化とタスク化を使ってプログラムを楽しようと思ってるんだけど、
楽をする前に組む作業がえらい大変、しかもソース汚い…見づらい…
やってしまえば後は楽なんだけどいきなりやることが難しすぎたか。
概念は頭にまぁ入ったけど計算がうまくいかない数学の問題みたい。
それって往々にして理解してないだけの話なんだけど、
今一概念すらも分かりづらいからやってられない…
3、4回組めば慣れちゃうんだけどなぁ〜、一回目は何にしろ。

数学の問題と同じだなぁ、すべからく。


そして、どうにもうまくない。
先まで見通して書かないといけないのはしんどいなぁ;;
苦手なフローチャートでも書こうか、なんか大学の課題みたいだ;;
posted by HAL at 16:30| Comment(2) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年03月06日

ポイントは最新版

というわけでただいまDirectX9.0cSDK(August,2006)にて
プログラムを書いているわけなんですが…

このDirectXっていうのはWindowsのある種一部分なんですが、
まぁWindowsのゲームの基礎部分なわけですよ。
これに問題がありまして…

マイナーバージョンアップが多すぎて話にならない!
月ごとにバージョンアップされるわ、アップデートして作ったゲームは
当然古いバージョンのDirectXしか入ってないPCじゃ動かないわ…
そもそも折角Windowsの一部にしたんだからXPのServicePack2を
普通に入れたPCでも動かないとおかしいんですよ、戦略的に。
大体がDirectX9.0cなんて2004年に出たバージョンじゃないか!
なんでFebruary,2007とかわけのわかんないことしてるんだよー。
9.0dとかにすればいいじゃないかーーーー。

月ごとのアップデートのせいで
DirectXが常に最新じゃないとプログラムが動かない罠。
プログラマはいいかもしれないがネット配信を考えると
インストール時についでにDirectXの最新版も入れないといけない。
となるとサイズが自動的に30MBくらい増える、話にならん。
SP2で動かすためにまさかダウンデートするとは思わなかったよ。
結局9.0bにまで戻そうか画策中、いっそ8でもいいんじゃねーの?
posted by HAL at 12:18| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

アクセス違反

PCを使ってると何気なしにページ違反やらアクセス違反やらが発生します。
Win98の時は特に酷かった…予告も無く落ちるんだから洒落にならん。

プログラム書いてると明日は我が身なわけで…
今書いてるプログラムが終了時にやたらとアクセス違反を発生させる。
そりゃぁもう100%の確率でってそれは俺がプログラムをミスしてるんだって。
とか思ってチェックしてみた。
OutputDebugStringが便利、挿入してエラーを探ったら
案の定というか、DirectAudioの解放処理の部分でエラーがでているくさい。

結局解放処理の順番が間違ってたせいで落ちまくってたですよ、と。
子より先に親を解放しちゃいけません…何やってるんだ俺o rz
posted by HAL at 09:13| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年03月04日

物質とは

偉大である。

プログラムやってると全ての世界を画面の中で構築することが出来る。
出来るけれども当然構築されていない要素は存在しない。

たとえば、三次元画像から二次元画像への投射。
物質界では人間の目やカメラと言う呼称のつく機械を使えば
光を媒体にして一瞬のうちに二次元へ投射することができる。
しかし画面の中で構築された世界には物体の実体はただの数字であり、
物質を兼ね備えているわけではない。
カメラも然り。
画面の中のカメラとは三次元座標から二次元座標への変換行列でしかない。
そこには光も、その反射、レンズによるピントの調節もない。
物質界では当たり前のようにピントのずれが生じ、
その結果二次元へ投射された射影は所謂『ボケ』が生まれる。
一方画面の中では物質が無い以上全てデジタルな計算を使っている。
機械はデータの持つ意味を理解できない。
ただそこにあるデータを定められた計算手順によりデータを吐き出す。
これ以上のことはしない。
彼らはそのデータが座標と言うことすら理解できない。
当然物質界のシミュレーションということなど理解できるべくもない。
従って表示されるデータはあくまでも計算に則った結果である。
カメラが単純な二次元への変換行列である以上『ボケ』ない。

人間が手前勝手に自ら認識しうる世界を画面の中に押し込めている以上、
それは当然やむを得ない結果だろう。
posted by HAL at 10:04| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

面倒くさい…

DirectAudioでデフォルトの再生タイプはMIDIとWAVE
……


圧縮フォーマットは無いんかい!


自前で用意するのか…o rz
posted by HAL at 07:24| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年03月03日

でーきーたー

ロゴ画面までo rz

ところでDirectGraphicsは画面を占有するけど
DirectAudioはオーディオデバイスを占有しないんだねぇ…
MediaPlayerと共存できるので音楽聴きながらプログラムをガリガリ。
とりあえず必要な機能をそろえるために何か一個ゲーム書くか…

STGとかは完成度低くてよければ凄く簡単なんだよなぁ〜。
アクションパズルも作りやすい…
個人的な好き嫌いか?
一応共通点としては操作性があまりとっぴなものが無いから作りやすいと思ってる。
もちろん詰めていけば難しいのは当たり前なんだが…

しかし残念ながらどちらも滅多にやらないから作りづらい。


後はー、セーブファイルの読み込み部分と…データの暗号化&圧縮かorz
後者は面倒だぬぁー、しかし現時点で無駄に700kb…
データを絞らなくちゃいけないのは確かorz

それにしても全部自前で用意するとなるとかなり大変だorz
posted by HAL at 04:26| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする

2007年03月02日

プログラミングメモ

Direct3DDeviceの消失処理が面倒。
2D描画でDirect3DXとかその他SwapChain由来のオブジェクトが無い場合は


LPDIRECT3DDEVICE g_lpD3DDevice;
---

if(SUCCEEDED(g_lpD3DDevice->Present(NULL,NULL,NULL,NULL)){

g_lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),0.0,0);

g_lpD3DDevice->BeginScene();

Render(); //各種処理

g_lpD3DDevice->EndScene();

} else {

if(g_lpD3DDevice->TestCooperativeLevel()!=D3DERR_DEVICELOST){

g_lpD3DDevice->Reset();

}

---

で何とかなりげ、これだとあかんことあるんかなぁー?
まぁさしあたってコレしか思いつかなかったんだが。
SwapChain由来のオブジェクトがあってもResetの部分で何とかできるハズ。
posted by HAL at 22:03| Comment(0) | TrackBack(0) | プログラミングメモ | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。