Archive for the ‘流動指向ゲームエンジン『Fooo』’ Category

スタイルでフォントを指定する

タグによるフォントの指定は、テキストの一部だけフォントを変えるなどできて便利なのだが
長~いスクリプトで全体的にフォントを変えていこうと思った場合
毎度毎度textパラメータに長ったらしい記述をしなくてはいけないのは、すごく面倒だ。
そんな時に使うのが…

スタイル定義だ。

フォントの形、サイズ、色などを『スタイル』という形で予め定義しておき、
命令ではそのスタイルを指定して使う。
このようにすると命令毎のフォントの指定を大幅に簡略化できる。

HTMLを知ってる人なら「スタイルシートみたいなものかな?」
と思ったかもしれない。
記述の仕方はちょっと違うが、機能の意図としては同じようなものだ。

どう書くのか見ていこう。
まずはスタイルを定義する記述。


style 普通 { face="MS ゴシック", size=32 }

“普通”という名前のスタイルを定義している。
簡単なので詳しく説明しなくても、どういう意味の記述かだいたいわかると思う。

次にスタイルの使い方。
スタイルはFONTタグで指定できる。


  CreateBalloon(name="台詞1"
    , text="<FONT style='普通'>それにしても<BR>腹が減った</FONT>"
    , x=588, y=75, tail=-30);

しかしまだこれもちょっと煩雑なかんじだ。
文章全体にスタイルを指定してしまってかまわない場合は、もっと簡単に記述する方法がある。
それがCreateBalloon命令のstyleパラメータを使う方法。


  CreateBalloon(name="台詞1"
    , style="普通", text="それにしても<BR>腹が減った"
    , x=588, y=75, tail=-30);

かなりスッキリした!
それでは組み込んでみよう。


style 普通 { face="MS ゴシック", size=32 }
style 小 { size=24 }

method Main()
{
  CreateImage(name="背景", image="背景.png"
    , x=0, y=0);
  CreateFrame(name="コマ1", image="コマ1.png"
    , x=440, y=0, alpha=0%);
  CreateFrame(name="コマ2", image="コマ2.png"
    , x="OutRight", y=65);
  CreateFrame(name="コマ3", image="コマ3.png"
    , x=407, y=505, ox="Center", oy="Middle", sx=0%, sy=0%);
  CreateBalloon(name="台詞1"
    , style="普通", text="それにしても<BR>腹が減った"
    , x=588, y=75, tail=-30);
  CreateBalloon(name="台詞2"
    , style="小", text="クククク…"
    , x=485, y=525, tail=160);

  Enter(to="背景");
  wait 1000;

  Enter(to="コマ1");
  Opaque(to="コマ1", time=1000, alpha=100%);
  wait 1000;

  Enter(to="コマ2");
  Move(to="コマ2", time=1000, x=780);
  wait 1000;

  Enter(to="台詞1");
  wait 1500;

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

  Enter(to="台詞2");
  wait 1000;
}

実行結果は前回と一緒なので省略~


タグでフォントを指定する

さてさて『動く漫画』を作ってみたわけだが…
かなり演出が大雑把で…

なーんだFoooなんてこんなものか

なんて思ったかもしれない。
いやいやいやいや
いやいやいやいや
いやいやいやいや

Foooの実力はこんなものではない!

しかし演出がまだまだ大雑把なのは間違いない。
ここからは、演出の細かな調整を可能にするFoooの様々な機能を紹介しながら
『動く漫画』をより読みやすく、躍動感のあるものに仕上げていこうと思う。

真っ先に手を加えたいのは、文字だ。
とにもかくにも文字が小さすぎる!
サンプルは画面を縮小して掲載しているせいもあって、あまりにも文字が見づらい。

文字のサイズを大きくしたい。
ではどのようにして文字のサイズを変えるかというと…

『タグ』を使う。

『タグ』というとホームページを作成する時に使う言語『HTML』を
思い出す人が多いのではないだろうか。
それが正解。
ここで言ってる『タグ』はHTMLのタグとほとんど同じものだ。

CreateText命令やCreateBalloon命令のtextパラメータでは、
次のようにして『タグ』を記述することができる。


  CreateBalloon(name="台詞1"
    , text="<FONT size=32>それにしても<BR>腹が減った</FONT>"
    , x=564, y=75, tail=-30);

FONTタグで文字サイズを32ピクセルに指定している。
さらにfaceパラメータでフォントを変えることもできる。


  CreateBalloon(name="台詞1"
    , text="<FONT face='MS ゴシック' size=32>それにしても腹が減った</FONT>"
    , x=564, y=75, tail=-30);

このようにHTMLのFONTタグとそっくりなかんじに書ける。
他に色や太さ、影、縁取りの指定なども可能だ。

ちなみにタグを使って改行もできる。
改行にはBRタグを使う。
これもHTMLと同じ。


  CreateBalloon(name="台詞1"
    , text="<FONT face='MS ゴシック' size=32>それにしても<BR>腹が減った</FONT>"
    , x=564, y=75, tail=-30);

では実際に組み込んでみよう。


method Main()
{
  CreateImage(name="背景", image="背景.png"
    , x=0, y=0);
  CreateFrame(name="コマ1", image="コマ1.png"
    , x=440, y=0, alpha=0%);
  CreateFrame(name="コマ2", image="コマ2.png"
    , x="OutRight", y=65);
  CreateFrame(name="コマ3", image="コマ3.png"
    , x=407, y=505, ox="Center", oy="Middle", sx=0%, sy=0%);
  CreateBalloon(name="台詞1"
    , text="<FONT face='MS ゴシック' size=32>それにしても<BR>腹が減った</FONT>"
    , x=588, y=75, tail=-30);
  CreateBalloon(name="台詞2"
    , text="<FONT size=24>クククク…</FONT>"
    , x=485, y=525, tail=160);

  Enter(to="背景");
  wait 1000;

  Enter(to="コマ1");
  Opaque(to="コマ1", time=1000, alpha=100%);
  wait 1000;

  Enter(to="コマ2");
  Move(to="コマ2", time=1000, x=780);
  wait 1000;

  Enter(to="台詞1");
  wait 1500;

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

  Enter(to="台詞2");
  wait 1000;
}
YouTube Preview Image

文字が大きくなって、グッと読みやすくなった!


動く漫画を作ろう

さて、ここまでの説明で『動く漫画』を実現するために必要な
基本的な知識はおおよそ整ったように思う。
ではではいよいよみなさんお待ちかね。
Foooスクリプトを使って実際に『動く漫画』を作ってみよう。

まず素材を用意しておく。

Fooo_CreateComic_Back Fooo_CreateComic_Frame1 Fooo_CreateComic_Frame2 Fooo_CreateComic_Frame3
背景.png コマ1.png コマ2.png コマ3.png

『動く漫画』は4つのステップで作っていく。
順に詳しく見ていこう。

STEP1: デーカーの作成

最初のステップは、デーカーの作成だ。
配置などは考えず、どばばーっと書き連ねてしまおう。


method Main()
{
  CreateImage(name="背景", image="背景.png");
  CreateFrame(name="コマ1", image="コマ1.png");
  CreateFrame(name="コマ2", image="コマ2.png");
  CreateFrame(name="コマ3", image="コマ3.png");
  CreateBalloon(name="台詞1", text="それにしても腹が減った");
  CreateBalloon(name="台詞2", text="クククク…");

  Enter(to="背景");
  Enter(to="コマ1");
  Enter(to="コマ2");
  Enter(to="コマ3");
  Enter(to="台詞1");
  Enter(to="台詞2");
}

Fooo_CreateComic_Step1

ぐちゃぐちゃだが…配置を無視しているので当然である。

STEP2: 配置

次のステップは、配置の調整だ。
配置の調整は、x, y, tailパラメータなどにまず適当な値を入れて
実行してみては微調整を繰り返す地味な作業である。


method Main()
{
  CreateImage(name="背景", image="背景.png", x=0, y=0);
  CreateFrame(name="コマ1", image="コマ1.png", x=440, y=0);
  CreateFrame(name="コマ2", image="コマ2.png", x=780, y=65);
  CreateFrame(name="コマ3", image="コマ3.png", x=100, y=355);
  CreateBalloon(name="台詞1", text="それにしても腹が減った"
    , x=620, y=110, tail=-30);
  CreateBalloon(name="台詞2", text="クククク…", x=485, y=525, tail=160);

  Enter(to="背景");
  Enter(to="コマ1");
  Enter(to="コマ2");
  Enter(to="コマ3");
  Enter(to="台詞1");
  Enter(to="台詞2");
}

Fooo_CreateComic_Step2

見た目が整った。

STEP3: 順序付け

第三のステップは、表示順の整理だ。
wait文を使って、Enterに時間差をつけていく。


method Main()
{
  CreateImage(name="背景", image="背景.png", x=0, y=0);
  CreateFrame(name="コマ1", image="コマ1.png", x=440, y=0);
  CreateFrame(name="コマ2", image="コマ2.png", x=780, y=65);
  CreateFrame(name="コマ3", image="コマ3.png", x=100, y=355);
  CreateBalloon(name="台詞1", text="それにしても腹が減った"
    , x=620, y=110, tail=-30);
  CreateBalloon(name="台詞2", text="クククク…", x=485, y=525, tail=160);

  Enter(to="背景");
  wait 1000;

  Enter(to="コマ1");
  wait 1000;

  Enter(to="コマ2");
  wait 1000;

  Enter(to="台詞1");
  wait 1500;

  Enter(to="コマ3");
  wait 1000;

  Enter(to="台詞2");
  wait 1000;
}
YouTube Preview Image

もうかなり漫画っぽくなってきた。

STEP4: 演出付け

第4のステップは、演出付けだ。
コマに動きをつけていく。


method Main()
{
  CreateImage(name="背景", image="背景.png", x=0, y=0);
  CreateFrame(name="コマ1", image="コマ1.png", x=440, y=0, alpha=0%);
  CreateFrame(name="コマ2", image="コマ2.png", x="OutRight", y=65);
  CreateFrame(name="コマ3", image="コマ3.png", x=407, y=505
    , ox="Center", oy="Middle", sx=0%, sy=0%);
  CreateBalloon(name="台詞1", text="それにしても腹が減った"
    , x=620, y=110, tail=-30);
  CreateBalloon(name="台詞2", text="クククク…", x=485, y=525, tail=160);

  Enter(to="背景");
  wait 1000;

  Enter(to="コマ1");
  Opaque(to="コマ1", time=1000, alpha=100%);
  wait 1000;

  Enter(to="コマ2");
  Move(to="コマ2", time=1000, x=780);
  wait 1000;

  Enter(to="台詞1");
  wait 1500;

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

  Enter(to="台詞2");
  wait 1000;
}

あちこち手を加えているが、何をしているのかは説明せずともだいたいわかるだろう。
ちなみにsx, sy, angle, alphaパラメータはCreate系命令でも指定することができる。

ひとまず完成だ!

YouTube Preview Image

まだまだかなり荒削りだが『動く漫画』を作る手順はざっとこんなかんじである。
随分面倒なんだな…と思っただろうか。
思ったより簡単だな…と思っただろうか。

こんにち、このような演出はFLASHやAfterEffectsのような
タイムラインをGUIに持つエディタを使って作成していくのが一般的だ。
そんな演出を全部スクリプトで構造的に書いてしまえるというのがFoooの面白い特徴だろう。


位置を抽象指定する

前回次のようなスクリプトを書いた。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=640, y=360
    , ox=200, oy=300);
  Enter(to="画像");
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  Rotate(to="画像", time=1000, angle=45);
}

このスクリプトを見て…
画面の中心位置や画像の中心位置を指定するのに、
いちいち画面サイズや画像サイズを調べて、
中心位置が何ピクセルだとか計算しなくちゃいけないなんてちょっと面倒だな…
とは思わなかっただろうか。

実際面倒だ。

実はもっと簡単に記述する方法がある。

比率で指定する

x, y, ox, oyパラメータにはピクセル数による具体的な指定だけでなく、
『比率』による抽象的な指定をすることもできる。
比率で指定する場合は、数字の後に%記号をつける。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50%, y=50%
    , ox=50%, oy=50%);
  Enter(to="画像");
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  Rotate(to="画像", time=1000, angle=45);
}

非常に明快だ。

抽象名で指定する

x, y, ox, oyパラメータには『抽象名』を指定することもできる。
抽象名はデーカーの特定の状態を表す抽象的な名前だ。
抽象名を使うことで、値を簡単に指定できるだけでなく
その指定が何を意図しているのかより明確になる。


method Main()
{
  CreateImage(name="画像", image="画像.png", x="Center", y="Middle"
    , ox="Center", oy="Middle");
  Enter(to="画像");
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  Rotate(to="画像", time=1000, angle=45);
}

“Center”, “Middle”と書いているのが抽象名だ。
xには”OutLeft”=左外側, “Center”=中央, “OutRight”=右外側
yには”OutTop”=上外側, “Middle”=中央, “OutBottom”=下外側
oxには”Left”=左, “Center”=中央, “Right”=右
oyには”Top”=上, “Middle”=中央, “Bottom”=下
などがそれぞれ指定可能である。


原点を指定する

これまでFoooの動作サンプルを見てきて、
拡大や回転の動きがちょっと変だなと思わなかっただろうか。
よく見ればデーカーの拡大や回転が、画像の左上を基準に行われているのがわかるだろう。

バグか!? バグなのか!?

いやいやバグではない。
左上が基準になっていたのは、デーカーの『原点』の位置が
画像の左上の位置(0,0)になっていたからだ。

『原点』とはデーカーの姿勢(配置、拡大、回転)の基準として使われる点のことである。
原点はデーカー内の座標として設定される。

ox, oyパラメータ

原点位置はデーカーの作成時にox, oyパラメータで指定することができる。
oxは原点の横方向の位置、oyは原点の縦方向の位置を指定するパラメータだ。
(ちなみにox, oyという名前は、origin x, origin yの略)

回転拡大を画像の中心を基準に行わせるには、
ox, oyパラメータに画像の中心座標を指定すればよい。
ではさっそく原点位置を画像の中心にしてみよう。
“画像.png”のサイズは400×600ピクセルなので中心座標は(200,300)だ。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=640, y=360
    , ox=200, oy=300);
  Enter(to="画像");
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  Rotate(to="画像", time=1000, angle=45);
}

実行してみよう。

YouTube Preview Image

画像の中心を基準に拡大、回転するようになった!
なお、原点位置を変えると見た目上の位置が変わってしまうので注意が必要だ。

ここではx, yパラメータに画面の中央位置を指定している。
デーカーの原点も中央位置なので、画面の中央に配置されたデーカーが
自身の中心を基準に拡大回転するという動きになっている…というわけだ。


命令を組み合わせる

さてさて今度は、移動と、拡縮と、回転と、半透明化をデーカーに同時にさせることを考えてみよう。

まーた新しい命令が出てくるの?

と思った人はちょっと早合点。
今回新しい命令は1つも出てこない。
なぜなら既に紹介したMove、Zoom、Rotate、Opaque命令を使えば実現可能なことだからだ。

答えから示そう。
次のように書けばいい。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Move(to="画像", time=1000, x=200, y=200);
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  Rotate(to="画像", time=1000, angle=45);
  Opaque(to="画像", time=1000, alpha=50%);
}

ちょ、ちょ、ちょ、ちょっと待って!
重複した命令は中断されるって前回言ったじゃん!
………と思うかもしれない。

だがこれでいいのだ。
確かに重複した命令は中断されるのだが、それはあくまで”同じ種類の”命令が重複した場合の話だ。
実は……… “異なる種類の”命令はデーカーに同時に与えることができるのである。

論より証拠。
とりあえず実行してみよう。

YouTube Preview Image

デーカーに異なる種類の命令を同時に与えると、
デーカーはそれぞれの命令を同時に遂行する。
Move命令とZoom命令を同時に与えると「移動しながら拡縮する」
Rotate命令とOpaque命令を同時に与えると「回転しながら透明度を変える」
といった具合だ。

今回は4つの命令を同時に与えているので、
移動と、拡縮と、回転と、半透明化が同時に行われたというわけだ。
これは言い換えれば…

命令は組み合わせることができる

ということである。
時間をずらして命令の組み合わせることも可能だ。
さらにwait文と組み合わせて次のようなスクリプトを書いたらどうなるか、想像してみよう。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Move(to="画像", time=1000, x=200, y=200);
  wait 500;
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
  wait 500;
  Rotate(to="画像", time=1000, angle=45);
  wait 500;
  Opaque(to="画像", time=1000, alpha=50%);
}

こんな奇妙な動きになる。

YouTube Preview Image

Move、Zoom、Rotate、Opaque命令はそれぞれ単体ではシンプルな動きしか表現できないが
組み合わせることで表現の幅が劇的に広がる。
単純な機能の『組み合わせ』で、複雑で多様な表現を実現するというこの考え方は、
Foooの重要な基本概念である。


デーカーを段階的に動かす

デーカーを動かすには、デーカーに命令すればよいことはわかった。
ではデーカーを右に移動させて、右への移動が終わったら下に移動させるといったように、
デーカーを段階的に動かすにはどうすればいいだろうか。

命令文は上から順番に実行されるわけだから…
右に移動させるMove命令を書いた後に、
下に移動するMove命令を書けばよさそうな気がする。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Move(to="画像", time=1000, x=200, y=50);
  Move(to="画像", time=1000, x=200, y=200);
}

これでデーカーが1秒かけて右に移動し、
さらに1秒かけて下に移動するようになりそうだ。
では実行してみよう。

Fooo_SerialMove_Exec1

デーカーは1秒かけて斜めに移動して止まった。
………Move命令を追加する前と変わらない動きだ。

バグか!?

いや、これはバグではない。
Foooの仕組み上必然的に起こる現象である。

Move命令がデーカーに移動しろと指示する命令であると説明したことを思い出して欲しい。
Move命令は『デーカーを移動する』命令ではなく、『デーカーに移動を指示する』命令なのである。
この違いは非常に重要だ。

このことは対象を指定するパラメータ名がtoという名前であることにも現れている。
デーカーの名前を指定するのだからパラメータ名はnameでもよさそうなものだ。

だが敢えてパラメータ名をto…「~へ」という名前にしているのは、
このパラメータが『命令の発行先』を意味するパラメータだからである。
そう、つまり

文字通り「~へ」なのだ。

(最もよく使うパラメータなので、できるだけ短い名前にしたかった…という理由もある)

つまり先のスクリプトは右に移動しろという命令を発行した後すぐに、
斜め下に移動しろという命令を発行しているということになる。
すなわち移動命令を重複して発行してしまっているわけだ。

デーカーは命令を重複して受け取ると、先に受け取った命令を中断して新しい命令に従う。
よって最初のMove命令は無視され、
後の命令だけが実行されて斜めに移動してしまうというわけである。

ではデーカーを段階的に動かすにはどうすればよいのだろうか。
答えは簡単だ。

待てばいい。

命令が重複してしまうのが問題なのだから、
最初のMove命令の動作が終わるのを待ってから
次のMove命令を発行すればよいのだ。

wait文

デーカーの動作を待つにはwait文を使用する。
wait文は指定時間だけ動作を待つことを意味する文だ。
命令文とは表記がやや異なる。
使い方は非常に簡単。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Move(to="画像", time=1000, x=200, y=50);
  wait 1000;
  Move(to="画像", time=1000, x=200, y=200);
}

これで最初のMove命令を発行して1秒待ってから、次のMove命令を発行するという意味になる。
実行してみよう。

Fooo_SerialMove_Exec2

期待通りの動きになった!

このようにwait文を使ってデーカーに命令を発行するタイミングをはかることで
デーカーにより複雑な動きをさせることが可能になるのである。


デーカーを拡縮・回転・透明化する

Move命令のほかにも、デーカーに指示できる命令はたくさんある。
他にどんなものがあるのか、順に見ていこう。

Zoom命令

Zoom命令はデーカーに「拡縮しろ」と指示する命令である。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Zoom(to="画像", time=1000, sx=200%, sy=200%);
}

to、timeパラメータはMove命令のソレと一緒だ。
sx, syパラメータにはそれぞれ横方向の倍率、縦方向の倍率を%で指定する。
(ちなみにsx, syという名前は、scale x, scale yの略)
実行してみよう。

Fooo_FormAction_Zoom

イメージデーカーが1秒かけて2倍に大きくなった。

Rotate命令

Rotate命令はデーカーに「回転しろ」と指示する命令である。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Rotate(to="画像", time=1000, angle=45);
}

to、timeパラメータはやはりMove命令のソレと一緒だ。
angleパラメータには回転角度を指定する。
実行してみよう。

Fooo_FormAction_Rotate

イメージデーカーが1秒かけて45度回転した。

Opaque命令

Opaque命令はデーカーに「不透明度を変えろ」と指示する命令である。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Opaque(to="画像", time=1000, alpha=50%);
}

to、timeパラメータについてはもう言わなくてもわかるだろう。
alphaパラメータには不透明度を%で指定する。
100%で完全に不透明、0%で完全に透明になる。
実行してみよう。

Fooo_FormAction_Opaque

イメージデーカーが1秒かけて薄く透明になった。

このように命令を使い分けることで、デーカーに様々な動作をさせることができる。


デーカーを移動する

画面に何かを表示するのに、いちいちデーカーを作らなくちゃいけなかったり
名前をつけなくちゃいけなかったり、なんだかちょっと面倒くさいな…
と思ったかもしれない。

面倒なのは、まぁ確かなのだが

こういう構造にしておくと、複雑な演出を簡潔に記述できるのである。
なぜ簡潔になるのか。
それはデーカーの動作をデーカー自身に任せることができるからだ。

──────現実で考えてみよう。
目の前に大きな壁がある。
壁の前にいるのは自分ひとりだけ。
壁には装飾が1つ貼り付けてある。

その装飾を動かそうとする場合、どうするだろうか。
装飾を手にとって、別の場所まで持っていけばいいだろう。
簡単な話だ。

しかし装飾が何個もあって、それぞれ同時に動かさないといけないとなったらどうだろう…
いくら手があっても足りない!
途方に暮れ…
そしてこう思うかもしれない。

「装飾が勝手に動いてくれればいいのに…」

装飾に車輪をつけ、機械仕掛けにして、目的の位置まで勝手に動くようにすればいい。
ちょっと大げさだが…
デーカーとは、まさにそんな大げさなことを実現してしまったものなのである。

これまでデーカーを部品だとか装飾だとか呼んで来たが、
実のところデーカーは単なる装飾ではない。
より高度な舞台装置… 言うなれば…

デーカーはロボットのようなものである。

デーカーには様々な命令をすることができる。
命令を受けたデーカーは、命令を自律的に遂行してくれる。
手取り足取り動かす必要はないのだ。

Move命令

ではデーカーにどんな命令をすることができるのか、具体的に見ていこう。
Move命令はデーカーに「移動しろ」と指示する命令である。


method Main()
{
  CreateImage(name="画像", image="画像.png", x=50, y=50);
  Enter(to="画像");
  Move(to="画像", time=1000, x=200, y=200);
}

toパラメータには対象となるデーカーの名前を指定する。
timeパラメータには動作の所要時間をミリ秒単位で指定する。
x, yパラメータには移動後の位置を指定する。
さっそく実行してみよう。

Fooo_Move_Exec

イメージデーカーが1秒かけて斜めに移動した。
このようにしてデーカーに対して移動命令を発行することで
デーカーの移動を簡単に実現できるのである。


『デーカー』

Foooは画面に表示する全てのものを部品として扱う。
部品には文章部品、画像部品、コマ部品、吹きだし部品などがある。

これはここまでに説明してきたことだが、
「ナニナニ部品」などといちいち呼ぶのはイマイチさまにならない。
そこでFoooではこれらの部品のことを…

『デーカー』と呼ぶ。

英語で書くと『Decor』。
“装飾”という意味だ。
画面を装飾するものといったニアンスである。

発音は正確には「デクォァール」といったカンジ。
一般的には「デカール」と日本語表記されるので、そちらの方が馴染みがある人も多いかもしれない。
「デーカー」と言う読み方をするのはFooo特有のものである。
なんでそんな読み方をするのかというと…

Decorをデーカーと読み間違えたからだ。

途中で間違いに気づいたのだけれど、
その後もそのままそう呼び続けて事実上名詞化してしまった。
とはいえ特有の概念の名前に一般的な単語を使うと、誤解を招きやすいという現象もあるので
怪我の功名というか…
逆にコレでいいんじゃないかと思っている。

後付だけどネ!

画像部品は、イメージデーカー(Image Decor)
文章部品は、テキストデーカー(Text Decor)
コマ部品は、フレームデーカー(Frame Decor)
吹きだし部品は、バルーンデーカー(Balloon Decor)

といった具合だ。
名詞化することで、ソレが何を指しているのかよりハッキリした気がしないだろうか。