三日坊主日記その3
![]()
![]()
![]()
・ゲーム作成日記延長
というわけで続きです。この時点で三日坊主じゃなくなってるんですけどね。
2/16タイトル画面に「でざいあぶる」と書いてしまっている事に気付くが、今更どうしようもないのでそのまま。現在ゲームタイトル名募集中です。「こんなのはどうか」という方掲示板までどうぞ。
HELで、画面サイズ320x240、パースペクティブ補正無し、スペキュラー無し(使ってないし)、テクスチャフィルタリング無しにしたらウィンドウモードで(ブロックの数によって変わるが)20fps行ったので、DirectDrawモードを作るのをやめました。逆に、ブロックが3Dっぽくなるモードを作る予定です。今はブロックは四角ですけど、そのモードでは立方体として描画します。
そうだ、その前に一つ一つDrawPrimitive呼んで描いているポリゴンをDrawIndexedPrimitive数回で描画できるようにしないと。
仕様を考えるばかりで何も進んでません。プログラム中の三日間と比べるととてものんびりしてます。こんなんじゃいけないんですけどねー。
2/17
日記に間違い発見。一日目の「DrawIndexedPrimitive×1000回を比べた結果、DrawPrimitiveの方が速かったです」という部分、「DrawIndexedPrimitive×1回を比べた結果」の間違いでした。そりゃDrawIndexedPrimitive×1000回と比べればDrawPrimitive×1000回の方が速いに決まってる。
一日目にfps表示を見た時は70fpsという状態だったが、今やってみると320x240のウィンドウモードでスタート直後なら158fps出ている事に気付く。まぁ確かにあの時は描画するブロックも多かったし。でもここまでとは……。
ちなみに、fps表示するとでそれだけfpsを食います。表示しない方が勿論速いです。GetDC使ってるし。現段階で、表示している時は158fps、表示してない時は192.5fpsです。……192.5fps!?そんなに速かったのか。これならいろいろ表示しても60fps保てるかも。ブロックの表示を立方体にしても60fps行けるか?
一つ一つDrawPrimitive呼んで描いているブロックをDrawIndexedPrimitive数回で描画できるようにした。まずはブロックだけ。結果、192.5fps→189fps。前と同じでDrawIndexedPrimitiveの方が遅い。でもあまり変わらないし、これだけ速いとfpsが参考になりませんな。もっといろいろ表示した時に威力を発揮するかもしれないし。
今までは、4つくっついた時は白い光っぽいのが下に出てきて、それが無くなるとブロック消えるようになっていたが、それを4つくっついた時は白く光り、それがだんだん薄くなって見えなくなった時に消えるようにしてみた。
青鹿4つつながった状態が、これだと色が少し白っぽくなるためどの色かが一瞬で判断しにくくなるし、消える時間まで後どれくらいなのかもわかりにくいので元に戻す。
これからもこういうことが何度かあるでしょうね。アクティブ連鎖ができて追加もできるため、判断を素早くできないとミスに繋がります。それなのに、エフェクトがいっぱい出ていて見にくくなったりしたら「見栄えは良くても操作しにくい」ということになってしまって本末転倒です。別にエフェクトを見るためにこのゲームをやってる訳ではないんで。
いかにして、見栄えと視認性を両立するかが問題ですよねぇ。
2/18
いい加減、60fpsを超えないようにする処理が必要ですね。以前使った物のソースを見てみるか。……自分で作ったのによくわからない。この頃はソースの見易さ無視してたからなぁ。新しく作るかな。
作りました。結構楽。これでウィンドウモードで速すぎてカーソル移動がままならないということが無くなるし、HELで動作が遅くてもカーソルの移動速度は60fpsの時と変わりません。ただし、遅い場合は少し操作しにくいです。キー処理を別のスレッドで動かせば解消されるんですけど。スレッド最近使ってないなぁ……。
昨日の白い光問題ですが、くっつけた瞬間だけ白く光るようにして、その後は今まで通りにしてみました。消える瞬間がわかりにくいなら、くっつけた瞬間だけにすればいい、ということで。遠くで4つ以上くっついた瞬間もわかりやすくなりました。見た目も良くなったし。
唐突ですが、ブロック3D化完了。でも大きな違いではありませんでした。こんなもんか。そこで、ブロックを半透明にしてみました。するとこれがなかなか綺麗。60fps保ってるし。くっついた時の白い光が今まで以上に映えるようにもなりました。それにしても、こういう半透明のブロックを見てると、どうしてもLEGOを連想せずにはいられない。
そんな半透明ブロックにも欠点が。色の判別が一瞬遅れます。またですねぇ。半透明だと隣のブロックの色までが透けて見えるので、その色と混ざってしまうんです。
話は変わりますが、今までの2D表示のブロックは辺の部分が黒くなっていて、これでブロックの境目を知る事ができます。何個くっついてるのかもわかりやすくなります。が、3Dのブロックでもこうすると、3Dらしさがちょっと無くなります。でもこの辺を黒くしないと境目がわかりにくくなってプレイに支障を来すし。
それを解決してくれるかもしれない方法。ブロックにマークを付ける。これでブロックのくっついてる個数もわかりやすいし、半透明で色が混ざる問題もこれで解決できます。後で思い出したんですが、パネルでポンもブロックにマーク付けてますね。しかもパネル落ちて着地した時や、高く積まれていてピンチの時にマークが揺れます。
関係無い話。今日1080°やったら気付いた事。リプレイで、カメラのすぐ近く転ぶとカメラが揺れる。このゲームって細かすぎ……。
何回もテストプレイ(兼デバッグ)してみて気付いた嫌な点。何個も追加しようと往復中に、その間のブロックが消えると往復できなくなる。これどうしましょう。3つくっついてたら目印を表示(ACなどのぷよぷよの"やさしい"モードみたいに)するという考えがあるんですが、これを慣れてる人がやる時でも表示したらマシになるかも。でも、「瞬時にフィールドの状態を把握する」という楽しみ(?)を奪ってしまう事になるのでパス。やっぱり4つつながっても引き離せるようにしないと駄目かな。
ゲームオーバーの判定を優しめにした。が、まだちょっと厳しいので、詰まってから何秒以内という条件にするつもり。
800x600の解像度で動かしてみる。60fpsで動く。想像以上の速度で動いてくれている。これなら消去時にポリゴン散らしても大丈夫か?
試しに、黒かった辺をブロックの色と同じにしてみる。結果確かに3Dっぽくはなったが、えらくあっさりとした見た目になってしまった。縁を黒くすると言えば代表的なのがアニメ絵ですが、あれの黒い線を無くすようなものです。貧相になりますよね。なので元に戻す。
今度はブロックの色にグラデーションを加えてみる。これは予想以上の効果。即採用。これで、今日の朝の状態とは全然違う見た目になりました。見た目ばっかり進化して、肝心の連鎖数表示がまだですが。
いっぱいくっついたら、くっつけた時の光を複数回光るようにした。通常1回のところを、12個以上で2回に、18個以上で3回。ちょっとくどいほどにビカビカと。
2/19
グラデーションをスペキュラーでするようにしました。速度は落ちたが見栄えは向上。とうとう640x480でブロックがいっぱいになった時60fpsを割ってしまった……。3D化した上に半透明じゃあ仕方ないか。
そろそろやるか、連鎖数表示。くっつけた数はcombo(結合・組み合わせ)、連鎖数はchain(鎖・連鎖)という表記にしよう。1ブロック分の大きさの文字とか、色付きの文字とかは使わない方が良いな。前者はブロックが見えなくなるし、後者は色の判断を間違えさせかねない。でも大きさが無いと派手に見えないしなー。動きまくるか。
あ、今日はもう寝よ。明日からは一気に進めよう。SANDMANさんとこの50000HITも近いし。
2/20
一気に進めました、ブラストドーザー(N64)を。やり始めたら止まらん……。実際はそれほど進みませんでしたけど。
ということで一気に進めるのは明日に順延。開発日記になってなくてすいません。代わりに、正式に使うフォントの文字を。
某ソフトの文字を使用これ見てもなんにもならないですけど。
2/21
2/19・20の日付が2/18・19になってました。
今日はテレビ見てブラストドーザーやって1080°やって気付いたら午後4時なんでそれからプログラミング。
連鎖数表示を作る。文字にエンボス効果を使ってみる。うん、ただ白いよりはいいんじゃないかな。表示の仕方は、最初大きくすぐに小さくするようにしました。素直に実装するだけで完成。連鎖数が多い時は表示も大きくしようと思ったんですけど、大きいと一瞬ブロックが隠れて見えなくなってしまいます。これが結構気になる。どうしよう。大きい時は半透明にすると、派手さが失われるかもしれないし……。
2/23
昨日は、テストプレイを何故か延々とやって、55万点という点数になったところで「連鎖数表示エフェクトの効果だな」と自己満足して終わりました。SANDMANさんのホームページが49700くらいだったので、いよいよ急がないとヤバいですね。
色を三色にして消しまくると、どこかで無限ループになってしまう。まだバグがあったとは……。配列の大きさを超えるとかそんな問題だと思うけど。
2/24
バグを追ううちに、1個所設計段階の欠陥を発見。些細な事で、ほっといても害はないが一応直す。
バグを退治。ケアレスミス。連鎖数表示エフェクトを作った時に手抜きで汎用変数(iとかjとか)を使ったのがそもそもの原因でした。汎用変数は使わない方が良いのは当然ですが(何のための変数かわかりにくいし、複数箇所で使ったりする場合もあったりしてバグの原因になりやすい)、BASIC時代のクセで手を抜きたい時につい使ってしまう……。
時間制限追加。1分半。経ったらゲームオーバー。
3D表示と2D表示を切り替えられるようにする。2Dにして画面サイズ320x240・スペキュラーなし・パースペクティブ補正なし・テクスチャフィルタリングなしにするとHELでも30fpsで動きますけど、見た目が貧相……。
2/25
いろいろあって一回休み。
2/26
とうとうSANDMANさんのホームページで50000HITです。独りごちに明日何か書かれるらしいのでそれを待ちます。というかこっちはゲームのマニュアル書いてないので、待つというより待ってもらうような。
時間切れで終了するとゲームを続けられるという問題発覚。さっさと直す。
今までは連鎖数表示で繋がった数しか表示していなかったが、連鎖数も表示するようにする。が、ここで問題発生。連鎖としてカウントされない事が。再現性があるけど原因はわからない。これから本格的に調べます。
マニュアル書いてないよ……。間に合うのか?最近ゲーム買ったのでそっちをやりたいのに……。
2/27
ちゃんと調べると、すぐに原因がわかった。判定するタイミングが、今見てみると「そこじゃ不十分でしょ」という所でやっていた。直すのにカット&ペースト一回。実行。直った。
とりあえず、ここらへんでやめておいてマニュアルを書きます。書き終わったらSANDMANさんに献上して、この退屈なゲーム作成日記も終わりにします。いやほんと退屈ですみません。でもネタが無かったのでちょうど良かったんですよ。
2/28
ゲームばっかりやっててマニュアル書けてません。いかんなぁ……。
3/1
今日からは用事があって実家に帰らなければいけないので、今日のうちにやっつける。3日の昼まで帰ってきません。
SANDMANさんにファイルの置いてあるURLをメールで伝えて終了。でざいらぶる(仮)に関してはこれで一段落。ちなみにここにあります。
ダウンロード:dr100.lzh(98KB)
画面構成の説明のためにスクリーンショットを使ったら、それだけでアーカイブが16KBも大きくなってしまいました……。
次からは平常運営に戻して、天球と環境マッピング(3Dな話)か、画面やキャラの振動(ゲームな話)についてやろうかと思ってます。
![]()
![]()
![]()
written by Y.Ohde e-mail : oode@alles.or.jp