|
クイックタイムムービー(フラッシュファイルも含めて)のように動いている画像は、なかなか静止画像と同じようにはいかない事があって、特にムービー切り替えの時にエフェクトをかけようとすると、まったく期待はずれになってしまいます。本来ならばムービー自体の中でエフェクト処理をほどこすのがベストなのですが、簡易的な方法でXTalk を使って、カード上でビジュアルエフェクトをやってみましょう。
今回は、ふたつのフラッシュファイルの切り替えにビジュアルエフェクトを使用するので、Web からのダウンロードは、時間差が生じるので適当ではありません。あらかじめ 009.rev のなかにふたつのフラッシュファイルを忍ばせておいて、009.rev がダウンロードされた直後にデフォルトフォルダーの中に、apple.swf と bird.swf というフラッシュファイルを、テンポラリーに作りだすという方法をとります。

009.rev のメインスタック(メインしかないんですけれど)の、カスタムプロパティに cApple と cBird という名前のプロパティに、フラッシュファイルのコンテンツが入っています。ハードディスク上からでも同じ方法で、このカスタムプロパティは作れますが、この説明のために Web から作れるようにしてありますから、開発環境の方は試してください。
put url "http://www.kenjikojima.com/runrev/apple.swf" into tApple
set the cApple of this stack to tApple
put url "http://www.kenjikojima.com/runrev/bird.swf" into tBird
set the cBird of this stack to tBird
もし bird.swf というファイルが Web でなく、デスクトップに置いてあるとしたら
put ("binfile:" & specialFolderPath("Desktop") & "/bird.swf") into tUrl
set the cBird of this stack to url tUrl
と、なります。binfile、specialFolderPath() 、 URL を使って、Web 上から作り出したのと同じ cBird がカスタムプロパティで作り出せます。伝統的にXTalk ではファイルの読み込みには、open file 、read from file、close file を使っていますが、Revolution では上のふたつの例からもわかるように、URL を使ってインターネットでもハードディスクからでも、同じようにファイルの読み込み、書き出しが行えます。(ハードディスク上では、open, read, close も使えますが)Revolution ではURL は非常に便利なので、できるだけ使うようにしてなれてください。
それではカスタムプロパティに入れた、テキストファイルのフラッシュファイルへの書き出しに移りましょう。スクリプトはカード1の openCard にあります。
put the cApple of this stack into url "binfile:Apple.swf"
put the cBird of this stack into url "binfile:bird.swf"
フラッシュファイルへの書き出しはバイナリーファイルで行う必要がありますから、URL "binfile:ファイル名" を使います。テキストファイルへの書き出しは URL "file:ファイル名" です。上記のように特にファイルパスを指定しないでファイル名だけの時は、デフォルトフォルダー内に書き出されます。これはテンポラリーファイルなので、カードが閉じる時点で削除します。
ちょっと前置きが長くなりました、本題に入りましょう。

左下にあるエフェクトのリストメニューから、どれかエフェクトを選んだら、右の「ムービー用エフェクト」をクリックします。クリックの度にムービーが切り替わって、その都度ビジュアルエフェクトが施されます。ひとつのムービーはループで繰り返されます。「普通のエフェクト」と比べると違いがハッキリわかるでしょう。特にフラッシュファイルの場合、中のグラフィックの作りやシンボルの外形などの影響が出るのがわかるでしょう。(エフェクトを選ぶボタンメニューにマウスを乗せると、ムービーはストップします)
フラッシュファイルに限らず、動画から動画の切り替えに、普通のビジュアルエフェクトを直接施すと、いろいろな影響が出てRevolution で扱える範囲では、処理しきれなくなってしまいます。ですからここでは、ムービーの最後をストップさせた時点で、静止画像のスナップショットを撮って、プレイヤーオブジェクトとまったく同じ位置にセットして、その静止画像にエフェクトを掛ける処置を採ります。
on snapPlayer
stop player 1
set the alwaysBuffer of player 1 to true
lock screen
import snapshot from rectangle snapRect()
set the rect of image (the num of images) to the rect of player 1
unlock screen
end snapPlayer
function snapRect
get (globalLoc(item 1 of the rect of player 1 &","& \
item 2 of the rect of player 1)&","& \
globalLoc(item 3 of the rect of player 1 &","& \
item 4 of the rect of player 1))
return it
end snapRect
プレイヤーのムービーをストップさせたら、プレイヤーの the alwayBuffer を true にします。これは、ストップしたショットを撮ったスナップイメージにムービーがかぶさって、見えなくなるのを防ぐためです。クイックタイムは the alwayBuffer が false の状態では、すべてのオブジェクトを覆ってしまう性質があります。ですからスナップが見えるように the alwayBuffer を true にしておかなくてはいけません。(プレイヤーの the alwayBuffer を true にしておくと、プレイヤーのコントローラーを出した状態では、コントローラーがマウスで動かなくなります)
次にスナップショットの rect 範囲を決めて、カード上にインポートします。005 では export snapshot を使って外部ファイルとしましたが、今回は import snapshot を使います。画像の範囲はプレイヤ−1の rect なのですが、 the rect of player 1 はローカルの rect を返しますから、 globalLoc(localRect) で、スクリーン上の rect を求めなくては正確な位置にスナップショットが配置できません。スナップでインポートしたイメージは最上のレイヤーに位置しますから、カード上にある (the num of images) がそのイメージナンバーです。イメージの配置移動などが見えないように lock screen をしておきます。
スナップイメージの配置が終わったら、次にスタートするムービーファイルを、プレイヤーオブジェクトに設定します。
set the filename of player 1 to the defaultFolder &"/apple.swf"
Put "hide image (the num of images) "& theVE into doEffect
do doEffect
set the alwaysBuffer of player 1 to false
delete image (the num of images)
start player 1
theVE は dissolve などのエフェクト名を入れたコンテナーです。一続きのスクリプト「hide image (the num of images) dissolve」を do を使って動かした後、プレイヤーオブジェクトの the alwaysBuffer を false にして、次のムービーが見えるようにして、前のムービーの最後のシーンであるスナップをデリートして、 start palyer 1 でムービーを再び動かします。
ムービーファイル(.mov) とフラッシュファイル(.swf) とでは、クイックタイムで動かしたとき少し性質の違いがあって、その調整が必要な事もあります。この009ではフラッシュだけですから、動画のシーンでは、プレイヤーの the alwayBuffer をいつもfalse にしているんですけれど、上にも書いたようにフラッシュ内のシンボルが動いたとき、the alwayBuffer が true になっていると、シンボルの下にあるベクターグラフィックが、消されてしまう事がしばしばあります。ですからクイックタイムムービーが動いている間、他のグラフィックやフィールドやボタンを上に乗せて見せる場合、フラッシュファイル(.swf) では避けなければいけません。
この性質を逆に利用して、ムービーがストップした時だけ the alwayBuffer を true にして、フィールド「ムービーは止まっています」が見えるようになっています。
最後に何かのトラブルで、スナップイメージが残ってしまう可能性もありますから、サブスタック上で保存ずるような場合は、カードを閉じる直前に不必要なイメージオブジェクトを、すべて取り除く措置が必要なこともあります。またテンポファイルを削除する前には、プレイヤーの filename を空にしてください。ファイルが使用中ではWindows で削除できなくなります。
|