日記(1013)

<前 次>

設定ミスだった

ふにゃさん、MIDIも鳴らせるようになりました。
なんのことはない。自分でライブラリのMIDI再生機能を使わない設定にしたのを自分で忘れていただけでした。
それで、無事MIDIも鳴らせるようになったのですが、今度は一部のMP3に問題が出てしまいました。
サウンドのストリーム再生を使うと、一部のMP3の場合、延々と後半部分を中途半端に再生し続けるのです。
ストリーム再生をやめれば正しく再生されるのですが、そうするとBGMに使うほどの巨大な音声ファイルを丸々メモリに読み込んでしまうことになり、動作が果てしなく不安定になってしまいます。

爆ボンのマップを作るのが結構大変なので、マップ作成ツールを作ろうと考えて、マップの下地となる枠を作って。

MIDIが鳴らない

ふにゃさん、BGMが鳴るようになりました!
ライブラリ側が結構しっかりしてるので結構いろんなファイル形式で使えたりするのですが、なぜか唯一MIDIだけがならなかったりします。

名前と場所

というわけでBGMの実装中です。
BGM.datを読んで、「BGM名 "ファイル名" 必要と有らばその他の情報」という形式で一行ごとにデータが入っていて、BGM名とファイル名があった場合はそのBGMが有効になります。
一応音声データもBGMに使えるようにするつもりですが、基本はMIDIだと思います。
もし読み込めなくてもライブラリ側が結構しっかりしてるので大丈夫だとは思いますが。

番号と名前

RPG±0にはRPGツクールのオートタイルは使わないことにしました。
最大の理由は、作り方がわからない&面倒くさいということだけれど、ほかにも、実際のところエンターブレインが特許を取っているかもしれないし、そうでなくてもあからさまに方法をパクっているもあるので。
あと、RPG±0ではいろんなものに名前をつけることができます。
例えばイベントに名前をつけたり、キャラクタチップに名前をつけたり、サウンドに名前をつけたり、敵パーティにまで名前を付けられたりします。
デフォルトネームは通し番号と同じものをつけます。

ふにゃさんのBGMは、パネルγのときのように色々面白い仕掛けを入れようと思っていたのですが、いや、今も入れるつもりですが、ゲームプレイ中にBGMを切ったりユーザーが自由に変えられるBGMに切り替えたりできるようにするつもりなので、切り替えたそのときにどのBGMが再生されているかを保持しておかなくてはならなくて、結局それはBGM番号であり、どっちみちBGMは番号で管理することになりそうです。
そりゃ番号をつけるということ自体はパネルγでも同じことですが、こちらはゲーム本体ではサウンド管理クラスにパネルが消えたとか今ピンチだとか、そういうことを通知してサウンド管理クラス側で番号を決めていたのですが、ふにゃさんの場合はそれを通知する側で決めてやら無ければならないということです。
そうなればユーザー指定のBGMとも互換性を図るためBGMはある程度決まった簡単な方式で作らなければならないので、あんまり特殊なことはできなくなるのです。

地道な作業の続き

というわけで、高速化に成功しました!
今までキャラの出しすぎで処理落ちしていたステージが処理落ちなし!
さらに副産物で、敵キャラクターの描画順序が一定になることで、場所によって敵の前後関係が変わるようなこともなくなりました。
ついでにふにゃのしゃがみ&歩きの処理も作ってしまました。
本当は前にも言ったようにデジタルな動きにしたかったのですが、アホなギヤバネが、ふにゃがしゃがんでいるかどうかが分からなくて、無理に弾き飛ばそうとしちゃったりするので、仕方なくそれに合わせた仕様にすることになりました。
ただ、普通に走っている状態からしゃがむとほぼ瞬時に止まりますし、歩きもほぼ一定速、ギヤバネに吹っ飛ばされても踏ん張るためほとんど動きません。
そうそう、今回は、しゃがみがジャンプのキャンセルも兼ねていたりしますよ。

オブジェクト指向とグループ分け

オブジェクト指向といったら何をオブジェクトにするかが大事なんです。
例えば、名簿クラスのメンバの各個人の名前はstring型を使うかCNameを作るかという問題など。
どの程度までクラスとしてまとめるか、分けるか、というので結構痛い目にあってるから使う必然性がない限りはあまりオブジェクト指向でやりたくないんですよね。
ええ、痛い目にあいました。ふにゃさんで。
分け方を誤った…。もっと細かく分けるべきでした。
派生クラスを作るときに余計なクラスをはさむべきじゃなかったんです。
実は、他のゲームでならこれでもよかったのですが、今回は違いました。
主人公にとって敵とアイテムの間に本質的な違いはないし、敵にとって他の敵と主人公の区別は無いんです。
仕事を語るのに白人も黒人も無いようなものですね。
今の仕様では主人公・敵・アイテム、という3人種がいて、それぞれで主人公は主人公で一まとめ、敵は敵で一まとめ、アイテムはアイテムで一まとめにしていたのですけれども、例えばですね。ウナギカズラというキャラ、主人公のふにゃと敵のミスターフレームは乗せるけど、敵のとげとげとギヤバネは食べてしまいます。
ギヤバネは他のギヤバネとぶつかって吹っ飛にますし、アイテムのバナナは主人公グループと、敵グループのミスターフレームに食われます。
だけど、ミスターフレームはめったに登場しません。つまり、敵の中からミスターフレームを探す作業は果てしなく無駄が多いのです。
これを、とげとげならとげとげだけのグループ、ウナギカズラならウナギカズラだけのグループを作れば、効率はかなり上がるはずです。
例えば、とげとげはウナギカズラを無視するからとげとげがウナギカズラを見る時間をそっくりカットできるというわけです。これで沢山敵が出たときの処理落ちが軽減されます。
バナナとかは主人公とミスターフレームしか見てないからバナナが多くて関係ない敵が多いとめちゃくちゃ無駄な時間が使われていたわけです。
しかし、こうして分けても、場合によっては全部を統一的に扱わねばならないときもあるので、結局は混在することになりそうですが、今の問題は、マップキャラと、例えばギヤバネの間に、敵キャラという分類を設けたことによる中途半端さによるものなので、いっそのこと全部か各個かのどちらかにしてしまえば問題はなくなるのです。
そもそも、敵キャラと味方キャラとアイテムの区別すら曖昧だったんですよね…。そもそも似たもの同士でグループ分けできるものじゃなかったんです。
しかし…変更は地道な作業になりそうです…。

うなぎ完成

LineConstructorアップしました。
おそらくつけ忘れの機能も無いはずだし、これでおそらく完成版になるものと思われます。

Lunascape3インストールしました。
インターフェースはまあまあ改善されているようです。
そのほかは別によくなったとか悪くなったとかは実感できず。

ふにゃさん、ウナギカズラが完成しました。
風などがゲームに実装されていないのでその点はまだなのですが、まあ現状ではこれ以上できることがないので。

1127399889.png

<前 次>