13. マスクとムービー

1.0.3 から、マスクの中だけに別の背景・立ち絵・CG・ムービーを出せるようになりました。 ムービーは、シナリオを止めずに背景の代わり・背景の後ろ・マスクの中で流せます。

まず見本を見てみましょう。
紹介デモ( data0\scenario\feature_demo.txt )の「② 応用サンプル」→ 6 ページ目の「23. マスクとムービー」で、ここに書いた機能を順に見られます。 Windows / ブラウザ / Android で同じように動きます。

13.1 マスクを作る

マスクは番号 1〜8 で持ちます。作り方は 2 種類です。座標は設計の 1280x720 で、 x y は左上です。

命令 すること
mask_shape 番号 形 x= y= w= h= [r=半径] [soft=ぼかし] エンジンが作る形。素材は要りません。形は rect (四角)・ round (角丸)・ circle (円)・ ellipse (楕円)。
mask_polygon 番号 x,y x,y x,y … [soft=ぼかし] エンジンが作る多角形(頂点は 3〜64 個)。
mask_image 番号 画像 [x= y= w= h=] [channel=alpha] 専用のマスク画像。 画像そのものは見えません。 明るい所( channel=alpha なら α の濃い所)にだけ中身が出ます。 x y w h を書かないと画面全体へ引き伸ばします。ルール画像の名前もそのまま使えます。

どの命令にも次の指定を足せます。

指定 意味
rot=度 回転(四角の中心のまわり)
opacity=0〜1 中身全体の濃さ
invert=1 裏返す(形の外だけ見せる)
z=bg|stand|cg 描く段。 bg は背景の上・立ち絵の下(既定)、 stand は立ち絵の上、 cg はイベント CG の上。どれもメッセージウィンドウより下です。

13.2 中身を置く

mask_shape 1 circle x=440 y=40 w=400 h=400 soft=6
mask_add 1 bg01b
mask_stand 1 data4/stand/ch01/smile at=center
	丸い窓の中に、別の背景と立ち絵が出ます。
mask_clear 1
命令 すること
mask_add 番号 絵 [x= y= w= h=] [alpha=] 背景・CG などの絵を足す。 x y w h を書かないと背景と同じく画面に収めて置く。
mask_stand 番号 絵 [at=center|left|right|ml|mr] [x=中心] 立ち絵の形で足す(足元を画面の下へ)。絵は data4/stand/ch01/smile のようにフォルダから書きます。
mask_movie 番号 ムービー [loop=] [volume=] マスクの中でムービーを流す(13.4)。絵とムービーは足した順に重なります(後から足した物が上)。
mask_bind 番号 bg=層 chara=層 sprite=層 cg=1 いま出ている背景の層・立ち絵の層・スプライト・イベント CG をマスクで切り抜く。 mask_unbind でやめる。層の絵を替えても切り抜きは続きます。
mask_clear [番号] [items=1] マスクを消す。中のムービーも止まります。番号を省くと全部、 items=1 は中の絵だけ消します。

mask_bind を使っている層で、ルール画像の切り替え( bg のルール指定)をすると、その切り替えは濃さの変化(クロスフェード)になります。

13.3 マスクを動かす

mask_move 1 x=60 rot=30 time=900 ease=3
wait 950

x y w h rot opacity のうち、書いた値だけが変わります。 time はミリ秒です。シナリオは待たずに次へ進むので、待つときは wait を書きます。 ease は 0 直線・1 だんだん速く・2 だんだん遅く・3 両端ゆっくりです。

マスクは画面に固定の窓です。カメラ・画面の揺れで中身は動きますが、窓は動きません。

13.4 シナリオを止めずにムービーを流す

movie_play bgmovie/town_loop target=bg
	背景の代わりにムービーが流れています。文章はこのまま進みます。
bg 0 bg01a
	下で背景を替えても、ムービーは止まりません。
movie_stop target=bg
target= 流す場所 シナリオ
bg 背景の代わり。背景の層の上・立ち絵の下。下の背景は見えません(替えても構いません)。 止めない
behind 背景の後ろ。背景の層 0 より下。背景の透明な所や、 mask_bind 番号 bg=0 と invert=1 で開けた穴から見えます。 止めない
mask:番号 マスクの中( mask_movie 番号 名前 と同じ)。 止めない
front (省いたときと同じ) 全画面の前面(今までの movie_play )。メッセージウィンドウを隠します。 止めない

背景の層の上にムービーを載せる bgmovie は今までどおり使えます(音なし。その層へ別の背景を置くと止まります)。

13.5 システムスクリプトから使う

関数 すること
Mask.image(番号, 画像[, x, y, w, h[, "alpha"[, 裏返し[, 段]]]]) mask_image と同じ
Mask.shape(番号, 形, x, y, w, h[, 半径[, ぼかし[, 裏返し[, 段]]]]) mask_shape と同じ
Mask.polygon(番号, "x,y x,y x,y"[, ぼかし[, 裏返し[, 段]]]) mask_polygon と同じ
Mask.add(番号, 絵[, x, y, w, h]) / Mask.addStand(番号, 絵[, 中心のxか"left"など]) / Mask.clearItems(番号) 中身の絵
Mask.move(番号, x, y, w, h, 回転, 濃さ, ミリ秒[, 効き]) mask_move と同じ
Mask.bind(番号, "bg"|"chara"|"sprite"|"cg", 層) / Mask.unbind(種類, 層) mask_bind ・ mask_unbind と同じ
Mask.clear(番号) / Mask.clearAll() / Mask.exists(番号) / Mask.isMoving(番号) 消す・問い合わせ
MovieLayer.play(名前, 再生先[, 繰り返し[, 音量[, x, y, w, h]]]) 再生先は "bg" ・ "behind" ・ "mask:1" 。成功で 1
MovieLayer.stop([再生先]) / setVolume(再生先, 音量) / isPlaying(再生先) / getName(再生先) 止める・音量・問い合わせ

13.6 セーブ・ロードと環境の違い