塾長の宮島です!(写真はイメージですw)
さて、開塾に向けて準備を進めているんですが、とーぜんながら塾長も勉強です!
Scratch(スクラッチ)の使い勝手を知りたかったので、ちょっと本格的なゲームプログラムに耐えられるかな?と思って
昔から作りたかった「ゲーム実況」みたいなものを再現できないかな?と思い付いて、やったらできましたw
「ゆっくり実況」が子供達の間で有名ですよね?
こういったゲームのユーチューブ動画なんですが、画面の左右下で、2名のキャラが実況していく奴です。
Scratchで制御が難しいだろうなぁ~と思ったのは、
- マルチスレッド(並列処理)
- 音のミキシング(合成)有無
でしたが、一応、クリアしました。
Scratchでマルチスレッド
まず、スプライト(画像)に対して、同一イベントから下に別のブロックを書いちゃえばマルチスレッドとして処理Aと処理Bは同時に動くようです。このパターンだと「旗が押されたら処理A、処理Bが同時に実行される」というパターンですね。
続いて別のマルチスレッド表現。
こちらも同一イベントで同時に動きますが、スプライトが違うパターンですね。こっちの方が一般的なマルチスレッドかしら?
同時に何か変数を見たい場合は「グローバル変数(どこのプログラムからもアクセスできる変数)」を使わなきゃダメです。ちなみにScratchは関数(Scratchではブロック定義と呼ぶ)は、グローバルじゃなくてスプライト単位です。これが意外と重要なところですね。プログラミングの管理が大きく影響してきます。
Scratchで音声合成(テキストデータ読み上げ)、ミキシング
Scratchで音声合成を使うのは簡単。拡張から「音声合成」を選択してあげるだけでOKです。すげぇ便利。
続いて音声合成2つのミキシング(下の画像参照)なんだがどうも出来たり出来なかったり。。諦めましたw。
以上、Scratciのマルチスレッド、合成音声の調査でした!続いてプログラムそのものです。
Scratchでゲーム実況その1。「セリフ定義とブロック定義」
いきなり「技」を見せますが、2名のゲーム実況作りなんだが、マイクみたいな第3のスプライトを用意して
- 実際のテキストデータのセリフ
- ゲーム実況キャラを呼び出す「ブロック定義」
を画像のように書きます。いわゆる「メインプログラム」ですね。
グローバル変数は
- セリフ(発声するテキストデータ)
- 会話処理がスタートしてくれるフラグ(会話フラグ)
を、2キャラ分、作成しておきます。
ブロック定義(関数)は
- セリフを差し替える
- フラグをONにする
- ウエイト(ミキシングの失敗を回避するため
だけにしておきます。ウエイトの長さは、だいたいセリフの長さ以上にしないと発声しない様子です。
Scratchでゲーム実況その2。キャラクタースプライトを発声、字幕表示、アニメーション
いわゆるフラグ監視の無限ループをマルチタスクで2つ定義しておきます。
グローバル変数の「会話フラグ」がONになったら
- (左側)音声合成の種別を変えて、グローバル変数の「セリフ」を発声させ、会話フラグをOFFにする。
- (右側)グローバル変数の「セリフ」を吹き出しで字幕表示させて、スプライトを次のコスチュームに10回変えて、会話フラグをOFFにする。
です。
もう1名の実況キャラも、音声合成の種類、フラグ以外は全て同じです。下記画像を参考に。
Scratchでゲーム実況その3。動作確認!
思い切ってユーチューブでチャンネルを作ってみましたw。サッと出来ちゃうんですね、恐ろしい…。
Scratciにスクリプトをアップロードされたい場合は下記をクリックしてください。
https://techmiyajima.club/dl_sample/script000001.sb3
以上です。