表情を変える

パーティクルエフェクトはこのくらいにしておいて
今度は一般的なアドベンチャーゲームでよく見かける
立ち絵の表情を変える演出を作ってみよう。

立ち絵は単なる画像にすぎないので、立ち絵の表情を変えるには
立ち絵の画像を入れ替えるという操作をする。
画像は瞬間的に入れ替えるのではなく、
時間をかけてクロスフェードさせるのがよくある演出だ。

それではFoooスクリプトで
「立ち絵をクロスフェードで入れ替えるスクリプト」を書いてみよう。
Opaque命令を使えば簡単にできそうだ。

立ち絵1.png
TransitImage1

立ち絵2.png
TransitImage2


method Main()
{
  CreateImage(name="立ち絵1", image="立ち絵1.png");
  CreateImage(name="立ち絵2", image="立ち絵2.png", alpha=0%);
  Enter(to="*");
  wait 1000;

  Opaque(to="立ち絵1", time=1000, alpha=0%);
  Opaque(to="立ち絵2", time=1000, alpha=100%);
}
YouTube Preview Image

これでうまくいった………
かと思いきや、よく見るとうまくいっていない。
立ち絵が一瞬なんだか白っぽくなってしまっている。
背景が透けてしまっているのだ。

これは画像が描画される順番をよく考えれば当たり前である。
まず画面に『背景』が描かれ、次に『立ち絵1』が半透明で描かれる。
この段階で画面は『背景』と『立ち絵1』が混ざったものになる。
さにらにその上に『立ち絵2』を半透明で描く。
すると…画面は、『背景』と『立ち絵1』と『立ち絵2』が混ざったものになる。

今やりたいことは、『立ち絵1』と『立ち絵2』だけが混ざったものを描くことである。
しかし実のところそのようなことは単純に不透明度をいじるだけでは実現不可能だ。
これを行うにはTransit命令を使う。

Transit命令

Transit命令はデーカーをクロスフェードトランジッションする命令である。
トランジッションとは「変化、遷移」という意味で、CG用語では一般的に場面転換を意味する。
ここではデーカーの変化といったニアンスで使われている。
Transit命令を使うとデーカーのクロスフェードを簡単に実現できる。


method Main()
{
  CreateImage(name="立ち絵1", image="立ち絵1.png");
  Enter(to="*");
  wait 1000;

  Transit(to="立ち絵1", image="立ち絵2.png", time=1000);
}
YouTube Preview Image

透けなくなった!


Leave a Reply

*