人生

やっていきましょう

850日目

ワープ床のギミックが完成したのでつぎのギミックの開発に移る。自分が次に作ろうと思うのは、床にあるスイッチの上に何かが乗っている間はスイッチが押され、そうでないときはスイッチが切れるというものだ。この何かにはゴールに運ぶ石像に加えて、単なる障害物、主人公自身なども含まれる。RPGなどではよく見られるギミックだが、自分のゲームではまだ実現していなかったと気付いたので作ることにした。

構造はおそらくワープ床よりも単純だ。岩を押した後、変数操作+を用いてスイッチ床の上が通行可能かどうかを判別すればよい。通行可能である場合イベントは発生せず、通行不可である場合のみスイッチが入るという仕組みだ。ただしこれだけでは主人公の判別ができていないので、それとは別に主人公の(x,y)座標が床スイッチの座標と一致するかどうかを判別し、一致するならばスイッチが押され、一致しないならば何も起こらないようにする。

開発は順調と思われたが思わぬ不具合が発生した。スイッチが押された瞬間とスイッチから物が離れた瞬間にスイッチ音を鳴らそうと考えていたのだが、これがどういうわけかうまくいかない。モノを動かす際にスイッチ音が毎回鳴ってしまう。

この原因はスイッチの上のモノを離す際のイベント処理にあった。スイッチの上のモノがスイッチから離れた際に1度だけ効果音を鳴らしたいのだが、現時点ではスイッチ床のある座標の通行判定を行ったのちに効果音の発生イベントを置いてしまっている。

この解決は、床スイッチの判定が切り替わる際に0か1を代入する変数が、代入される前の値に等しい場合に効果音を鳴らす、という仕組みにすることで可能となる。たとえば床スイッチの上の座標が通行可能であるかどうかの判別を行う際、通行可能であれば0を、通行不可であれば1を代入する変数を用意する。今回はスイッチから岩を動かした場合のことを考えるので、判別後には変数には0が代入される。ここでこの代入を行う前に、条件分岐「この変数の値が1である」を判別させる。もし仮に変数の値が1である場合、床スイッチが通行可能でありかつ変数が1となるのは床スイッチから岩が動かされ、判別を行った直後のこの瞬間以外ありえない。したがってその時だけ効果音を鳴らすことで、スイッチが離れた瞬間にのみ効果音が鳴るということになる。