親子にする

十回近くにわたって手を入れたかいもあって「動く漫画」もずいぶんさまになってきた。
しかしよくよく演出を見てみると「クククク…」の吹き出しが出てくるのが
どーにもワンテンポ遅いかんじがする。

すると言ったらする!

どうやらコマの表示が終わるのをキッチリ最後まで待っているのが原因のようだ。
ここはひとつコマの表示が終わる前に吹き出しを表示し始めることにしよう。

けれども問題はそう簡単ではない。
コマは拡大しながら表示されるので、コマの表示が終わる前に吹き出しを表示させると
吹き出しの尾がコマの中のキャラクターの口もとから離れてしまうのだ。
それはちょっと具合が悪い。

コマの拡大に合わせて吹き出しも拡大させればいいと思うかもしれない。
しかしそうするとまた新たな問題にぶつかる。
コマの中のキャラクターの口もとの位置は、拡大によって移動していくので、
吹き出しの尾の位置を口もとの位置にきっちり合わせて動かすのが至難の技なのだ。
がんばればなんとかなることはなるが…なんとも泥臭い。
もっとスマートに実現したいところだ。

ではどうすればいいと言うのか。
ズバリ

吹きだしをコマにくっつけてしまえばいい。

吹きだしをコマにくっつけて、吹きだしとコマが一緒に動くようにすればいいのだ。
実はデーカーには他のデーカーをくっつけることができる機能がある。
この時、くっつけられる方を『親』、くっつける方を『子』と呼ぶ。
またこのようにデーカーをくっつけることを、デーカーを『親子にする』と言う。

親子とはプログラマにとっては馴染み深い言葉であるが、一般的にはわかりにくい言葉かも知れない。
ここで言う『親子』とは、人間の親・子とは意味がちょっと違う。
賭け事の親・子でもない。構造的な関係を表す比喩的な言葉だ。
それはこの関係構造を図で表すと木が枝を伸ばしたような図になり
それがある種の家系図のように見えるからだ。

──────ややこしい話はともかく
どうやってデーカーを親子にするのかサンプルを見てみよう。


method Main()
{
  CreateImage(name="親", image="親.png", x=100, y=100);
  CreateImage(name="親/子1", image="子.png", x=50, y=50);
  CreateImage(name="親/子2", image="子.png", x=50, y=50);
  CreateImage(name="親/子3", image="子.png", x=50, y=50);
  Enter(to="親");
  Enter(to="親/子1");
  Enter(to="親/子2");
  Enter(to="親/子3");
}

あるデーカーを子にしたい場合、nameパラメータに”親の名前/子の名前”という形で名前を指定する。
これだけでそのデーカーを子にすることができる。
このサンプルでは”親”に、”子1”、”子2”、”子3”の3つのデーカーを子として作成している。
toパラメータで子のデーカーを指定する場合も、同様に親の名前を書く必要があることに注意しよう。

“子1”、”子2”、”子3”の位置は”親”からの相対位置になる。
子は親が移動すれば一緒に移動し、親が拡大すれば一緒に拡大する。
完全に親の動きに追従するので、ある意味子は親の一部になっているとみなせる。

とまぁ…説明が長くなったけれど…やることは単純だ。
それでは組み込んでみよう。
子は親からの相対位置になるのでx, yパラメータの修正も忘れずに。


style 普通 { face="MS ゴシック", size=32 }
style 小 { size=24 }
style つぶやき { interval=100, speed=250, effect="Rise" }

method Main()
{
  CreateImage(name="背景", image="背景.png"
    , x=0, y=0);

  CreateFrame(name="コマ1", image="コマ1.png"
    , x=440, y=0
    , outline_shape="Fade", outline_color=RGBA(0,0,0,64), outline_thick=8);
  CreateFrame(name="コマ2", image="コマ2.png"
    , x="OutRight", y=65
    , outline_shape="Vivide", outline_color=white, outline_thick=8);
  CreateFrame(name="コマ3", image="コマ3.png"
    , x=407, y=505, ox="Center", oy="Middle", sx=0%, sy=0%
    , outline_shape="Vivide", outline_color=black, outline_thick=8);

  CreateBalloon(name="台詞1"
    , style="普通", text="それにしても...<BR>腹(はら)が減(へ)った"
    , x=585, y=65, shape="Dumpling", w=300, h=185, tail=-30);
  CreateBalloon(name="コマ3/台詞2"
    , style="小", text="<FONT style='つぶやき'>クククク…"
    , x=63, y=15, shape="Rock", w=220, h=125, tail=160);

  CreateColor(name="幕", color=white, w=1280, h=720, blend="Add");

  Enter(to="背景");
  Enter(to="コマ1");
  Enter(to="幕");
  wait 500;

  Opaque(to="幕", time=1000, alpha=0%, step="DecSin");
  WaitDecor();

  Enter(to="コマ2");
  Move(to="コマ2", time=800, x=780, step="Dec3");
  WaitDecor();

  Enter(to="台詞1", effect="Bound");
  WaitDecor();

  Enter(to="コマ3");
  Zoom(to="コマ3", time=1000, sx=100%, sy=100%, step="AccSig");
  wait 600;

  Enter(to="コマ3/台詞2", effect="Expand");
  WaitDecor();
}
YouTube Preview Image

吹き出しがコマにくっついているかんじになった!
うん…ちょっと効果がわかりにくいカモシレナイ。


Leave a Reply

*