「DirectX」に関する日記(5)

<前 次>

「ふにゃふにゃ」のダメージエリアを汎用エリアに移行しました。
変数名変える→コンパイル→エラー箇所確認→コンパイル→エラー箇所確認・・・
・・・見る人が見たら怒り出しそうなやり方ですね。
ともかく、汎用ということで、何にでも使える変数を用意してみたりしています。
「ふにゃさん」で初めて正式な対応にする予定だった風の処理もこれの応用で作れそうな気がしてきました!

DirectMusic、半分ほど書けました。
明日更新しますよ。

ナウシカ読み終わりました

真面目にDirectX音楽編02.を書いていました。
「ゲーム音楽について」と重複する部分がありますが、プログラミングよりで書くことがありますので、それで差別化を図っておきます。
例えば、SetRepeatsに関しては2つほど気をつけることがありますし、SetLoopPointsについてもうまくループしてくれなくなることもあります。
詳しくは明後日。

ナウシカ5~6読んでました

DirectMusicのループさせるサンプルを作っていました。
プログラムソース自体は2行追加するだけという馬鹿みたいに単純なのですが、少しややこしいところがあったり意外な挙動を示すことがあったりして、ただループするだけでも結構書くことができそうです。
でも意外に面倒なのが鳴らすMIDIと説明のための画像。
何しろどっちも芸術性(元々ないけどさ)とかよりもDirectMusicがどのように動くかがわかりやすいようにしなければならないので、使い回しができません。
とか何とか言いつつすでにどちらもほぼ出来上がってたりするんですが。

アイラが海の男に

今度の更新はDirectMusicの続きにしようと思います。
DirectDrawはまた後回し。
DirectMusicは結構単発ネタが多いのでどうやってまとめるかというところにかかってきそうです。

リンクハイラル城で暴れまわる

いやぁ、なんかタートナックを思いっきり壁に叩きつけて倒したり、モリブリンが2階から吹っ飛ばされて1階まで落ちたり、結構様になっていましたよ。
ゴードンの音楽の変化パターンはああなっていたのか…

DirectDraw

真面目にDirectX平面編01ウィンドウを書いています。
明日更新できなければ更新は17日以降になります。
いろいろと都合がありますもので。

なるたけなるだけ

更新しました。
DirectMusicを。
一応鳴るには鳴りますが、鳴らす以外にはな~んにもできません。
1回だけ音楽を垂れ流して終わりです。
後日の更新のためにわざわざ不完全に。

HP作成論におまけを追加しました。
実にどうでもいいことが書かれています。

音楽編

DirectMusicのサンプルを作っていました。
プログラムそのものは簡単なのですが、やっぱり曲データですね。
Bomber丸のテーマでも鳴らしてみようかと思ったのですが、なんだか自分で聞いてて恥ずかしくなったんで、「ふにゃふにゃ」の音楽のボツ曲を2倍速にして鳴らすことにしました。

ガベージコレクタ

アクセスログ回収。
403エラーが増えてました。
わざとですけどね。

「RPG±0」で、DirectMusicを使えるところまで作りました。
そして、64個のサウンド+ミュージックのバッファも。
最初はObject型かVariant型の配列64個を作って両方に対応するつもりでしたが、型判別が面倒臭そうだし、自動メンバ表示が出てこないので、DirectSoundBufferとDirectMusicSegmentの両方を64個用意し、どちらを使うかを判別するための変数も64個。
どうせCreateしない限りは大してメモリを使わないんだし、変数が64個から192個になったってそう変わるものではないでしょう。
終了処理では、オブジェクトの実態の有無とは関係なしに片っ端からNothingにしています。
この辺ガベージコレクタが働いてくれてるのでCなどのようにNULLじゃなければ解放とかそんなまどろっこしいことはせずに済んで楽チンです。

マスターテンポ

「真面目にDirectX」を書くのと「RPG±0」を作るためにDirectX7のマニュアルを見ていて、DirectMusicの基本的なところを読み返していたら、偶然C++のSetMaster~関連の記述を見つけました。
VBのSetMaster~関連の関数はC++用には見つからなかったのでVB特有の機能だと思っていたのですが、どうやらSetGlobalParamでGUIDを設定することにより可能なようです。
本当は「RPG±0」のほうと作る予定だったのですが、C++でのSetMasterTempoを試すため、「DirectMusicPlayer」のほうに変更を加えました。

だめだめ

今日サーバー使用量を銀行で振り込もうと思っていたのですが、窓口は閉まってたしATMでは現金が使えなくて、振り込めませんでした。
振り込み期日までにはまだまだ10日以上もあるので適当にいけそうな日を見て振り込みなおしに行きます。

「DirectMusicPlayer」を作ろうとしてみたのですが、DirectXわからんMFCわからんで結局何もできませんでした。
ヘルプ見たらわかるかなと思ったんですが、ちんぷんかんぷん。
DirectX8だったらできるかもしれないと思うところがあるので、また調べてみます。

DirextX

DirectX7の日本語のヘルプを見つけました。
見れば見るほどあの本よりわかりやs・・・・おっと。
チュートリアルを見ながら3Dでも・・・・
いやいや、どうやら相互先の一つのサイトが3Dを扱いたいとか言っていたので、そちらに期待してみますか。
3Dを始める前に2Dをある程度使いこなせるようにもなりたいですし。
というわけで、今後はDirectDrawとDirectMusicに力を入れてみようかと思います。
DirectMusicってDDrawやDSoundと比べれば使ってる人少なそうだけど、うまく使えばかなり高度なことができそうですよ。

アドレスx2

http://www.interq.or.jp/black/minami-m/
にDirectXのサンプルがたくさんあったので見てみることにしました。
例の本に書いてある通りにやるとどうもうまくいかないのであの本のサンプルはもう信用しないことにします。
どうも「自作のライブラリを使った」サンプルであるようですが、ライブラリのソースが公開されているのでいろいろ改造して遊べそうです。

http://hp.vector.co.jp/authors/VA003665/
をリンク集に追加しました。
これからはリンク集の更新は更新履歴には書きません。
サンフラットホームページです。
いけばわかります。

案ずるより生むが安し(←字が違う)

そういえば基底クラスと派生クラスってコンストラクタとデストラクタが呼び出される順ってどうだったっけ。
と思ったので、早速実験用のプログラムを作ってみました。
基底クラスAとそれを継承した派生クラスBを用意し、それぞれのコンストラクタとデストラクタにメッセージを表示するコードを書いて実行時にクラスBを生成!
結果は、予想通りに「Aのコンストラクタ→Bのコンストラクタ→Bのデストラクタ→Aのデストラクタ」でした。
これまでは念のため基底クラスには初期化のコードを書かないようにしていたのですが、これからは心置きなくコンストラクタで初期化できます。
一応、ダウンロードできます。

3DはZバッファを部分のコードを写すところで面倒になって中断しました。
とりあえず今度からは「ふにゃさん」の制作のほうに取り掛かって、3Dは思い出したときにでも、ということにしておきます。

今日は一教科だけテストがありました。
最後の問題で、答を導き出す簡単な一次方程式まで作って、いざ解こうとした瞬間に、
「はいそれまでです」
・・・・

ブラックボックス

Direct3Dで直方体を表示するプログラムを作ってみました。
実際には例の本のサンプルほぼそのままですが、自分なりにアレンジしてみました。
ところが、どこがどう悪かったのか、真っ白に作ったはずの直方体は真っ黒に。
最初背景も真っ黒だったので描画できていないものを勘違いして焦ってしまいました。
アレンジしてあるので、新しい立体を追加するのが容易で、実行時には空間を自由に飛びまわることができます。
ただ、あまり飛び回っているとあっという間に自分の位置を見失ってしまって終了せざるを得なくなるんですが。
遭難する数秒前のカメラが残した写真をアップロードしてみました。

アンケートを追加しました。
いい加減「その他」にあるものをトップページに持っていきたくなったので今以上にトップページが重くなってもいいかどうかをきくためのアンケートです。

テスト

今日は学校でテストがありました。
しかし教科書を忘れてしまって復習ができず、悲惨な結果に・・・・
普段は必要以上に自信をもっているので本当に危ないと思います・・・・
化学のテストは、公式を使う部分はほぼ全滅です。
他の部分は例によって根拠もなく自信があるわけですが。

3Dの続きをやっていました。
とりあえず最初は四面体に挑戦してみようと思っています。
一応少しだけ拡張性を高く作るつもり。
練習程度に発展させられるようにしたいからです。

3Dプログラミング

自宅サーバーで使っている簡易スケジュールCGIで、スケジュールを書き込むときに過去の情報を消して軽量化するようにしました。
また、日本で使っているので9時間の時差を調整する処理も作ったので、昨日の内容が表示されるということもなくなりました。

Direct3Dを使ってのプログラミングを始めることにしました。
とりあえずは入門書に書いてあることをそのまま…とはいっても例によって当てにならない本で、おまけにインストールされているSDKは8のものということで、またまたいくつかの不具合が出てしまいました。
今回はほんとーーに右も左もわからない状態で始めたので、ソースはスパゲッティ状態(微妙に別の意味にも取れそう)かつ関数の意味を説明するコメントだらけになりそうです。
いいんです、練習用ですから。
で、3Dオブジェクトは、自作するのが面倒なので、フライングジャンプ3のウィリアム=パピヨット9世君を使うことにします。
いいんです、練習用ですから。

「ふにゃさん」のインプットクラスに、マウスに関する変数を作りました。
キーボード及びジョイスティック操作の時には無視されます。
また、マウス使用時も、方向キーの代わりに使っている間は無視されます。
それと、設定用のクラスも作りました。
「ふにゃふにゃ」のときの、設定ファイルの内容が正常値から少しでも逸脱すればすぐ初期化してしまって設定に拡張性がなかったということの反省を踏まえて、今回は設定バージョンというものを取り入れて、読み込みは完全な上位互換性を維持し、書き出すときは最新バージョンで記録します。
簡単に言うと、設定が追加されても後から正常に使えるということです。

「VisualBasic初心者連盟」が、2月中に閉鎖されてしまうようです。
掲示板のPRが寂しくなるなぁ…

DirectXについて

プログラミングのコーナーを更新しました。
DirectXで検索してやってくる人が意外と多かったので作ってみることにしました。
とはいえ私自身DirectXはあまり使えないので更新ペースはいつもよりさらに遅くなりますが。
また、DirectDrawは結構どこでもやっているので、DirectMusicやDirectPlayなどのどちらかというとマイナーなものを中心に紹介していきたいと思っています。

日記過去ログの5月分をアップしました。
JavaやらC#やらGBAなどにも手を出したりしています。
ついでにC#やらGBAなんかについては完成したら公開する予定なのでダウンロードページに名前だけでも載せておきました。
また、更新予定のページにも。

「ドラクエ7」をやっていました。
火山の奥に潜む魔物を倒したのですが、その魔物、灼熱の炎で焦がすとか何とか言いつつ実際に使えるのは火の息だし、今回の戦いに至っては火の息さえ使うまもなくあっさりやられちゃってました。
やっぱレベル上げすぎかな?

エラーまみれの本

「DirectMusicPlayer」を作っていました。
MFCについては本に書いてあった通り+面罵自動表示からの類推でなかなかスムーズにできたのですが…
DirectXに関しては、あの本、立ち読みしていた頃よりもずっと、想像していたよりもずっと、突っ込みどころ満載の本でした。
「フムフム、IdirectMusicのdは小文字ね・・・」と本の内容を微塵も疑わず一字一句間違いがないように打ち込んでいくと・・・・
コンパイラに怒られました。
「IdirectMusicなんて知らん!」
「HandleFailure関数なんか誰が用意しとるかぁ!」
しかも読み込みたいのはスタンダードMIDIファイルだったので、いろいろとアレンジしなければならないことになってしまいました。
おかげでインクルードファイルやら他のDirectMusicを使ったプログラムやらを見ながら試行錯誤しながら作ったのでただ本の内容を写すだけというやり方よりはわかったような気がしますが。
本で大体の流れをつかんで試行錯誤しながら理解、といったところでしょうか。

ほんのジョークです

アンケート[このサイトってどうよ]にある項目「宇宙一!最高!」、「いや、世界一に負けときます」、「日本一で結構です」、「俺の見たページでワースト1」、「こんな糞サイト地球のゴミだ」、「むしろ宇宙の環境汚染だ!」の6つは、わかるとは思いますが、冗談でつけた項目です。
実際に投票されたら、前の3つは「いいサイトだと思うよ」に、後の3つは「ヤなサイトだぜ」に足し合わせて考えるようにしています。
でも実はちょっとだけ「むしろ宇宙の環境汚染だ!」に投票して欲しいなと思ってたり。

「DirectMusicPlayer」を作り始めました。
ダウンロードページから見てもらってもわかるのですが、DirectXとMFCの練習用のプログラムです。
とりあえず、MIDIの音色変更、チャンネルごとのボリュームの調整など、将来ゲーム制作で使いたい機能を付けようと思っています。

日記3月分アップしました。
落ちたり通ったり買ったり遊んだり。

ドラクエ7を買う金がなくなった。何故なら…

「入門DirectX7」という本を買いました。
テンポが変わる程度で素晴らしいとか言ってたり3D酔い必至の3Dプログラムを作ってみたり、いろいろと言いたいことはあるのですが、全体的に見ればDirectXについて総合的に全ての範囲をまあまあ使える程度にまでカバーしているのでいい本だと思いますよ。
さすがに半年も立ち読みばっかりなのは悪いので、それと立ち読みじゃどうしてもじっくりと読めないので買ってしまったのです。
本当はトゥーンレンダリングだかセルシェーディングだかのアニメ風3Dレンダリングの載っている本が欲しかったのですが、DirectDrawさえもろくに使えないのにこのような専門的(にみえる)な本は早いと思い、全体的に満遍なく扱っている本を選んだのです。

「MusicPlayer」シリーズのスクリーンショットを更新しました。
最初のページに全部起動した状態を縮小表示したもの、個々のスクリーンショットはリンク形式で原寸大のものを載せています。

通常の式(BASICの代入式)から逆ポーランド記法の式に変換するプログラムを作り始めました。
現在は変換作業に使うスタックとプッシュ・ポップ処理ができています。

「Tieth Laboratory」の「エアツェールング2」のテストプレイをしています。
なかなかいい感じ。

<前 次>