2007/10/22 ここ1週間程度は気が進まない等で、進めていなかったが今日から再開します。
とは言ってみたものの、スコア表示と当たり判定をつける予定だったのだが、 実験的な仮組みでは、内部的に色々不都合や無理が出てきたので、 ここらへんで本気作成モードに入ることにしました。
で、今までと何が違うって、『表面的には目に見える形で進まない』 ってのが大きな違いです。
なので、居るのかどうか不明ですが、当分テキスト・オンリーの 面白みの無い日記&一般人には意味不明の日記になってしまうかもしれません。
気長に待っててください。

2007/10/14 技術的には前回とほとんど変わりがないのだが、敵(と仮定した物)を作ってみた。
右から左へと進んで来る敵を避ける(攻撃は出来ない)ゲームだね。
まず目先の問題点としては、
・ キャラクタが三角と四角
・ 当たり判定が無い
・ スコア表示が無い
・ 重ねあわせ処理ができていない
とまあ先はまだまだ長い訳だが、まぁ趣味でやってるので、ゆっくり行こうという感じ。
HPもそう頻繁に更新できるとは限らないので、見てる人は気長に待ってください。

【サンプル】
※画面の端に自機(を想定した三角)が表示されます。
キーボードの上下左右の矢印キーでキャラを動かすことが出来ます。
敵キャラクタが右から左へと体当たりしてきます。
◆ダウンロード(ESCキーで終了します)


2007/10/10 仕事が忙しかったりと、制作が滞ってしまった。
表示の基礎の基礎ができたので、今度は自機のルーチンの仮組み。
プレイヤーの操作によってキャラを動かす処理を作ってみる。
DirectInputの使用は後にして、とりあえずwindowsAPIでキーボードの状態を読み取る。
GetAsyncKeyState(VK_LEFT)&0x8000trueだった場合、キーボードの『←』キーが押されている事が判断できる。 キーの状態によって、自機のxとy座標を変化させる感じ。画面からはみ出てしまう場合は、座標の変化を抑制させる。

【メモ】
GetAsyncKeyState(VK_LEFT)&0x8000trueだった場合、キーボードの『←』キーが押されている事が判断できる。
【サンプル】
※画面の端に自機(を想定した三角)が表示されます。
キーボードの上下左右の矢印キーでキャラを動かすことが出来ます。
◆ダウンロード(ESCキーで終了します)


2007/09/25 DirectXを使用した表示方法に大きく分けて2種類の方法がある。
それはDrawPrimitiveDrawPrimitiveUPの種類。
何が違うかと言うと、前者は頂点データ(ポリゴン情報)をグラフィックカードの持つメモリ上に配置して描画を行い、 後者はPCのメインメモリ上に頂点データを置くという違いがある。

DrawPrimitive
グラフィックボードにデータがある為に処理は早いが、CPUとグラフィックボードの両者がメモリを参照する事になり、 内容を書き換える場合は、お互いの処理が衝突しないようにメモリを一時的にロックをする必要がある。 その対策としてデータの書き換えでなく行列変換で動作をさせるのだが、それだと複数のキャラが同時に処理できない(変換行列にしたがって全て同じ移動をしてしまう為) なので、キャラ個々にDrawPrimitiveを発行する必要がある。
どっちかというと複雑な3D表示向き。

DrawPrimitiveUP
頂点情報をメインメモリからグラフィックボードにその都度(大抵は1秒間に60回)転送して描画する方法。
同じテクスチャであれば複数同時に転送ができるので、複数キャラをまとめてテクスチャにしておけば命令を発行する回数は最小限で済む。 主に2Dゲームで採用される(昔からある)方式。

【メモ】
テストコードを作成してみた。200キャラ(1200ポリゴン/1フレーム)が上から下に移動します。
現時点でのテストコードの結果から行くと、
DrawPrimitive 65FPS
DrawPrimitiveUP 70FPS
でDrawPrimitiveUPのほうが、高速に動作(1秒間に70回の描画)しているという結果になった。
この辺は後からでも改造できるように作っていく事になるので、とりあえず先に進める。

【サンプル】
※HPのバナーが上から下へ流れていきます。(テクスチャの設定を間違えたので画像が逆さま)
◆ダウンロード(ESCキーで終了します)


2007/09/20 なんとかテクスチャを貼って好きな画像を表示できるようになった。
サンプルも複数のファイルが必要だと面倒なので、リソースとして実行ファイルに埋める方法も解った。
次は、大量のキャラクタを画面に表示する必要があるのだけど、どうやれば効率的に高速に表示できるかが課題。
教科書どおりにやってたら、大抵は遅いのよ。というか、表示を解説してる資料は沢山あっても、 複数を効率よく表示する方法って案外少ないのが現実。

【サンプル】
※HPのバナーが上から下へ流れていきます。
◆ダウンロード(ESCキーで終了します)


2007/09/15 2Dゲームなら四角が表示できればOKなのだが、3Dも視野に入れてるので、ポリゴン表示にも挑戦。
メタセコイアという3Dのモデリングツールのサンプルを表示してみた。
sin, cos を使って座標を変えていき、目の前をグルグル回るのを作ってみました。
簡単と言えば簡単だけど、空間図形と三角関数が理解できてないと動かせれないので、高校数学レベルだね。
あとスコア表示などに2Dも必須なのだけど、テクスチャがなぜか貼れない…
何故だろう?とりあえず、正しく動作するサンプルプログラムをじっくり見てみよう。

【サンプル】
※ロボットが目の前でグルグル回ります。
(2本のファイルを同じフォルダに置いて実行しないと動作しません)
◆ダウンロード(ESCキーで終了します)
◆ダウンロード(必須ファイル)


2007/09/12 解らない事が多いので、本を1冊追加購入。
1冊で全てが解るハズもなく、やはり複数冊買ってみたいとダメだと実感。
説明の中身で相違点は無いにしても、解説の無い項目があったりと、1冊ではカバーしきれないのよ。
またネットやオンラインヘルプもあるけど、やはり紙媒体のが使いやすい。メモ書きとかもできるからね。
といあえず、エラー無く動かせるようにはなったけど、これだとまだ基礎中の基礎。
応用が出来るようになるまでは、色々サンプルを作っての試行錯誤が必要です。
空間座標やベクトル計算はそれほど苦手じゃないんだけど、まだ3Dグラフックの作法とかの知識が不足してます。

【サンプル】
※四角が左から右へと移動を繰り返すサンプル
◆ダウンロード(ESCキーで終了します)


2007/09/09 とりあえず、ゲームの進行(タイトルとかゲーム中とかの移り変わり)に適した形で directXの初期化などを入れた試作品を作る。
三角ポリゴンを2つ使って、四角を表示するも、なぜか色が黒い… 色々試行錯誤して、改造をほどこして色は付くようになったが、今度はウインドウサイズが変更になった瞬間にエラーが発生する。
デバイスの再生成をする必要があるのは解るのだが…
まだまだ先は長そうです。



2007/09/08 開発環境の紹介
Windows XP
 (最近のDirectXはXP以降で無いと開発できないので泣く泣く購入)
Visual C++ 2005 Express Edition
 (無償で入手できて、配布制限がありません)
Microsoft Platform SDK for Windows Server 2003 R2
 (上記VC++は.NETは開発できてもwin32が開発出来きません。win32で開発する為にはこれが必要)
Microsoft DirectX SDK (February 2007)
 (ゲームを作るには事実上必須です)

2007/09/06 前々から思ってた同人ゲーム作成の環境が整う。ついでなのでHPにもページを作る。
【メモ】
Microsoft Visual C++ 2005 Express Editionで世の中にあるサンプルを動かすとデフォルトでは「文字列を代入するにはLPCWSTRのキャストを行え」なんて怒られる。
プロジェクト->プロパティ->構成プロパティ->全般の中にある 文字セットを"Unicode 文字セットを使用する"を"マルチバイト文字セットを使用する"に変更すれば良い。(ユニコードをデフォルトにしてしまってる為)
【サンプル】
ウインドウを作るだけのサンプル。
画面は真っ黒だけど、これでもdirectXの初期化をちゃんとやってます(笑)

◆ダウンロード(ESCキーで終了します)

[戻る] (Visit No.Counter)