メイドイン俺のフレーム時間管理と各種キッカケ/アクションの動作
メイドイン俺では、時間を抽象化して1-1や8-4という値で表します。
しかし、1-1の次の瞬間に1-2になるわけではなく、ある程度の間を置いて1-2になります。
一般的に、この「間」のことをフレームと呼びます。
ここでは、フレームがキッカケとアクションにどのように影響するのかを考えていきます。
概要
名称の定義
「音楽」の画面から、「ふつう」のゲームで2小節、「ながい」のゲームで4小節だと考えられます。
1小節が1-1〜4-4なので、1-1〜1-2までは16分音符と同じ長さです。
ここでは、この中で最小の単位である16分音符を1ビートとし、「1-1を1ビート目、1-2を2ビート目」「1-1〜1-2の間は1ビート」と数えることにします。
フレームとは何か
フレームとは、ビートよりもさらに短い「本当の」最小の単位です。
たとえば、以下のような現象が起こったことはないでしょうか。
- 「スイッチがオフ→オン」というキッカケを使い、同時にスイッチをオンにしたいのに何故か一瞬だけズレる。
- 「アニメのさいせいがおわった」キッカケで同じアニメを繰り返したいのに段々ズレていく。
これらは「スイッチがオフ→オン」や「アニメのさいせいがおわった」キッカケの判定が条件を満たした瞬間に行われるわけではなく、その一瞬あとに行われるということを表しています。
ここでは、この「一瞬あと」の一瞬を1フレームと定義します。
フレームを測定する
では、1ビートは何フレームなのでしょう。
これがわからなければこれからの作業に支障が出るため、1-1と1-2の間のフレーム数を計測します。
測定方法
複数のぶったいのスイッチが1フレームごとに順番にオンになるようにし、「時間が1-2」と同時にキッカケを満たすまでのぶったいの個数を数える。
1つ前のぶったいの「スイッチがオン→オフ」をキッカケ(=前のフレームにオンになった時)に「じぶんのスイッチをオン」にするようにし、これをリレーすることで順番にオンにしていきます。
結果
9個目のぶったいが「時間が1-2」と同時にキッカケを満たしました。これを図で表すと以下のようになります。
ぶったい | 1-1 | 1-2 | |||||||
---|---|---|---|---|---|---|---|---|---|
1 | オン | ||||||||
2 | オン | ||||||||
3 | オン | ||||||||
4 | オン | ||||||||
5 | オン | ||||||||
6 | オン | ||||||||
7 | オン | ||||||||
8 | オン | ||||||||
9 | オン |
アニメのフレーム数を測定する
次に、アニメのスピードごとのフレーム数を求めてみました。
「アニメのさいせいがおわった」をキッカケにして新たにアニメを再生するとズレることから、スイッチと同様に1フレーム前の状態を見ると考えられます。
測定方法
あるぶったいに2コマのアニメを用意し、「時間が1-1」に「ゲキはやで1回だけ」再生します。
その後、「アニメのさいせいがおわった」と、「時間1-2(9フレーム目)」のキッカケが同時に満たされた時に「スイッチをオン」にします。
結果
フレーム | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
アニメ | A | A | A | A | B | B | B | B終 | B | B | B | B | B | B | B | B |
スイッチ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ |
備考 | 再生が終わった | 次のフレームでオンに…… |
_,._ ( ゚д゚)!?
なぜかスイッチがオンになりません。
測定失敗
ここで考えられるのは二通り
- スイッチとは違い、再生が終わったフレームにすぐキッカケが満たされる(1フレーム前である)
- 「再生が終わった」状態とは、アニメのコマの表示が終わり、次のコマが表示できなかった時である(1フレーム後である)
前者(仮説A)はアニメの再生タイミングをズラすのが面倒なので、まずは後者(仮説B)から試します。
アニメのフレーム数を再測定する(仮説Bの場合)
測定方法
ぶったい1は先ほどと同様にアニメを流します。
それとは別に、ぶったい2を用意し、「時間1-2(9フレーム目)」をキッカケに「スイッチをオン」にします。
ぶったい1は、「ぶったい2のスイッチがオフ→オン」と「アニメのさいせいがおわった」をキッカケに「スイッチをオン」にします。
結果
ぶったい | 情報 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | アニメ | A | A | A | A | B | B | B | B | B終 | B |
スイッチ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オン | |
2 | スイッチ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オフ | オン | オン |
備考 | ぶったい1はBの次のコマが存在しないのでアニメの終了 ぶったい2のスイッチオン | 前のフレームの状態を見て、ぶったい1のスイッチがオンに! |
_,._ ( ゚∀゚)!!
測定成功
というわけで、「アニメのさいせいがおわった」キッカケが満たされるのは、アニメの最後のコマが終わった瞬間ではなく、そこから2フレームも後になってしまうことがわかりました。
「くりかえし」で再生しているアニメとズレてしまうのはこれが原因だったようです。
アニメの他の速度の再生スピードを求める
上記測定より、アニメ(ゲキはや)の再生スピードは4フレーム/1コマだということがわかりました。
同様に、ぶったい2の時間を変えて測定したところ、以下のような結果が出ました。
ぶったい2の時間(2コマ) | 再生スピード | |
---|---|---|
ゲキはや | 1-2(9フレーム目) | 4フレーム/1コマ |
はやい | 1-3(17フレーム目) | 8フレーム/1コマ |
ふつう | 2-1(33フレーム目) | 16フレーム/1コマ |
おそい | 4-1(65フレーム目) | 32フレーム/1コマ |
ゲキおそ | 8-1(129フレーム目) | 64フレーム/1コマ |