0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel Script Player ― EndRollからタイムライン再生へ

0
Posted at

Excel Script Player ― EndRollからタイムライン再生へ

はじめに

感動はチカラなり。

スーパーファミコンのRPGのエンディングに感動してから、もう30年以上。

あの頃は、まさか30年以上経ってからExcelでそれっぽいものを作ることになるとは思っていませんでした。

あるとき、ふと思いました。

ExcelのUserFormなら作れそう。

最初は単純なEndRoll表示でした。

基本的には、テキストを読み込んで表示するだけです。

例えば、

00:00:04It's
00:00:08- How's
00:00:04Three
00:00:04It's nice
00:00:03Good to see

のように、テキストに時間を持たせておけば、その時間に合わせて表示できます。

もちろん、時間情報のない普通のテキストなら、設定したデフォルトの待ち時間で表示することもできます。

ところが、作っているうちに、だんだん話が変わってきました。


EndRollから表示エンジンへ

最初は、画面の下から上に向かって表示していく、いわゆるエンドロールタイプでした。

ところが制作している途中で、ふと思いました。

これって設定によっては、ただの方眼紙描画もできるよね?

文字を表示する位置を変えられる。

表示する行数も変えられる。

スクロールするかどうかも設定できる。

そう考えていくと、EndRoll専用にしておく必要はありません。

文字を表示するための画面として使える。

ここで、今回の仕様がほぼ固まりました。

EndRollを表示するために作っていたものが、少しずつ、

「テキストを指定した位置・時間に表示するためのPlayer」

へ変わっていきました。


タイムライン処理

次に必要になったのが、時間の扱いです。

例えば、

00:04:19It's
00:04:22- How's
00:04:24Three
00:04:26It's nice

というデータなら、

「4秒待って表示する」

というより、

「4分19秒の位置でIt'sを表示する」

という考え方になります。

これなら、音楽や動画など、別の時間軸を持つものに合わせてテキストを表示できます。

一方で、タイムカウンターを使わない場合は、デフォルトの待ち時間を使って、

1行目
 ↓
待つ
 ↓
2行目
 ↓
待つ
 ↓
3行目

という普通のテキスト再生もできます。

つまり、

時間情報があればタイムラインに合わせる。
時間情報がなければデフォルトの待ち時間で再生する。

という使い分けです。


タイムライン処理・リピート処理

制作を進めていくと、タイムライン処理だけでなく、リピート処理も必要になってきました。

「この時間になったら表示する」

「最後まで行ったら止める」

「リピート設定なら最初からもう一度再生する」

という処理です。

実際に作ってみて思いました。

タイムライン処理・リピート処理って、こんなことをやっていたんだ。

ボタンを押せば移動するだけじゃないんだね。(笑

表示するだけの処理から、だんだん「再生するための処理」が増えていきました。


画像を表示したくなった

さらに制作している途中で、もう一つ考え方が変わりました。

画像を表示しながら文字を表示するのではなく、

文字を表示しながら画像を表示したほうがいいかもしれない。

そうなると、

文字を表示
    ↓
画像を表示
    ↓
次の文字
    ↓
別の画像

というように、テキストの中に「何をするか」を指定したくなります。

ここで単純な文字表示だけでは足りなくなりました。


タグ解釈モードへ

そこで、テキストの中にタグを入れて、その内容を読み取るようにしました。

例えば、

<TIME>00:04:19:</TIME>It's

のような形式です。

時間情報をタグとして分離しておけば、文字と時間を別々に扱えます。

さらに、

<SHOW>image01</SHOW>

のようなタグを考えていくと、

テキストを読みながら、次に何をするのかを決めていく

という仕組みになってきます。

ここで、EndRoll表示から少しずつScript Playerらしい形になっていきました。

※ これらのタグは現在のところ実装されてません。


入力形式が違っても、同じように再生する

ここで面白いことにも気づきました。

例えば、

00:00:04It's
00:00:08- How's

という形式でも、

<TIME>00:04:19:</TIME>It's
<TIME>00:04:22:</TIME>- How's

という形式でも、

最終的にPlayerが必要としているのは、

「この時間に、この文字を表示する」

という情報です。

つまり、

入力形式A ─┐
            ├→ 内部データ → Player → 表示
入力形式B ─┘

という形にできます。

これが今回の制作でかなり面白いと感じた部分です。

入力形式が違っても、同じように再生する。

入力方法と再生処理を分けることで、Player側は同じ仕組みを使えます。


テキストファイルを変更するだけで再生内容が変わる

もう一つ、この仕組みの面白いところがあります。

表示する内容をVBAのコードに直接書いているわけではありません。

テキストファイルを読み込んで再生しています。

そのため、

EndRoll.txt

を書き換えれば、VBAを変更しなくても、

  • 表示する文章
  • 表示する順番
  • 表示するタイミング

などを変更できます。

つまり、

データを変更するだけで、再生する内容が変わる。

ここまで来ると、最初に作っていた「EndRoll表示」とは少し違うものになっていました。


PreviewとRun

そして、実際に使うことを考えて、2つのモードを用意しました。

Previewモード

タイムカウンターをチェックしながら、スクリプトの内容を確認するモードです。

タイムライン上でどのように表示されるのかを確認できます。

Runモード

テキストファイルをそのまま読み込み、実際に再生するモードです。

つまり、

確認するためのPreviewと、再生するためのRun。

この2つを組み込むことで、スクリプトを確認してから実際の再生へ進めるようにしました。


EndRollからScript Playerへ

最初は、

「昔のRPGのようなEndRollをExcelで表示してみたい」

というところから始まりました。

それが、

EndRoll
 ↓
スクロール表示
 ↓
タイムライン
 ↓
リピート
 ↓
画像表示
 ↓
タグ解釈
 ↓
複数の入力形式
 ↓
Preview / Run

と少しずつ広がっていきました。

最初から全部を設計していたわけではありません。

作っている途中で、

これもできるんじゃないか?

と思ったものを追加していった結果です。

そして最終的に、

EndRollを表示するものではなく、スクリプトを読み込んで再生するもの

として整理することができました。

そこで今回、表示先をUserForm Labelコントロールにした

excel-script-player

としてGitHubに公開しました。

30年以上前に見たエンディングが、今になってExcel VBAを動かすことになる。

やっぱり、

感動はチカラなり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?