アプリ版:「スタンプのみでお礼する」機能のリリースについて

前にも質問させていただきましたが
どうしても解決せず・・・
再度質問させていただきます。
Flashに関しては完全な初心者なんですが
とある事情により、明日までにスライドショーを作成しなくてはいけません。
お力添えいただけないでしょうか。

--
使用しているのは
WindowsXP Flash8 Professionalです。
今回はスライドプレゼンテーションを使って作成しています。
--

単純にやりたいことは
「○秒間、写真を表示させた後に、トランジションを使ってフェードアウト」
なんですが、○秒間静止画を表示させるための、スクリプトがわかりません。

前に、こちらでsetIntervalのスクリプトを教えていただいたのですが、指定した時間表示してくれるのですが、それがループしてしまうみたいで、点滅しているようにしながらフェードアウトしてしまうのです。

他にも調べて実行してみましたが
どうにもうまくいかず・・・

どのようなアクションスクリプトを書けば
そのように実行してもらえるのでしょうか。


今書いているスクリプトを載せておきます。
(2秒間表示させたあと、2秒間の間隔で点滅しながら、フェードアウトしてしまうスクリプトです。)
具体的に教えていただければ幸いです・・・

お力添えください。
何卒よろしくお願いします。

A 回答 (3件)

前回

http://okwave.jp/kotaeru.php3?q=2186392 の、#2で回答した者です。


まず、スライドプレゼンテーションで作る時は、

 _root.gotoAndPlay( ○○ );

というアクションは使ってはいけません。スライドが正しく進行しなくなります。
理由はありますが、お急ぎとのことですのでここでは割愛させていただきます。

一定時間ごとにスライドを切り替えるスクリプトは、大体、No.2186392 でご紹介した通りです。
ただ、トランジションは”スライドが表示される時”ではなく”次のスライドに移る時”だったのですね。
自前でスライドショーを作る時は多少は融通が利くのですが、スライドプレゼンテーションではこのあたりが少々面倒です。

そこで相談なのですが、

 ・表示される時、イン(フェードインなど)のトランジション
 ・スライドを2秒表示
 ・切り替わる時にアウト(フェードアウトなど)のトランジション、同時に次のスライドがインのトランジション付きで表示される

という演出はいかがでしょうか。
要するに、スライドが切り替わる時は前のスライドと次のスライドでクロスフェードになる形です。

これですと、例えばイン・アウトのトランジションがともに2秒で静止時間も2秒だとすると、スライド1枚あたりの表示時間はトータルで6秒ということになります。
すると、自前で作るのは setInterval で6秒ごとにスライドを切り替える関数を呼び出す部分だけで、演出であるインとアウトのトランジションはビヘイビアで簡単に設定できます。

------------------------------------------------------------------

まず、写真を配置したスライド(子のスライド)全てにトランジションのスクリプトを設定します。
トランジションは「ビヘイビア」で設定します。


ステージの横に、スライドのリスト(スライドの構成図のようなもの)が表示されているかと思います。
写真を配置したスライドを選び、「ビヘイビア」パネルで「スクリーン」→「トランジション」と進んで、トランジションを設定してください。

この作業を、1枚のスライドにつき2回繰り返します。
トランジションのビヘイビアを選ぶと、「トランジション」というパネルが開きます。
右側に速さ等を指定する項目があり、この1番上に”方向”という項目があります。
1つは”イン”、もう1つは”アウト”に設定してください。
”長さ”は両方とも同じ秒数にします。


「ビヘイビア」パネルに、設定されたトランジションのアクションのリストが並びます。
このリストの、左側の項目(”イベント”の項目)を見てください。
最初は” reveal ”になっています。
” reveal ”と書かれている部分をクリックすると、リストが表示されて、トランジションを実行するイベント(タイミングのようなもの)を選択できるようになります。

”イン”のトランジションのビヘイビアは” reveal ”のままで構いませんが、”アウト”のトランジションのビヘイビアは” hide ”に変更してください。
これで、スライドが表示される時にイン、次のスライドに切り替わる時にアウトのトランジションが実行されるようになります。


この作業を、全ての子スライド(デフォルトでは”スライド○○”という名前が付いています)に行ってください。
なお、既に allTransitionsOutDone で次のスライドに進むためのビヘイビアが設定されているようですが、先に進むスクリプトは自前で用意しますので、これは削除してください。
「ビヘイビア」パネルでビヘイビアを選び、”-”のボタンを押すと削除できます。

**************************************

自前で用意するスクリプト(一定時間ごとにスライドを切り替えるスクリプト)は、最も根底にあたるスライドに書きます。


スライドのリストで、最も上にあるスライドを選択した状態で「アクション」パネルを開いてください。
このスライドは、デフォルトでは”プレゼンテーション”という名前になっています。
「アクション」パネルは、「ウィンドウ」メニュー→「アクション」、または「プロパティ」パネル右上の矢印のアイコンをクリックすると開けます。

「アクション」パネルの上部に「▼ アクション - スクリーン」と表示されていることを確認して、次のようなスクリプトを書きます。
見辛くて申し訳ありませんが、コピーしてそのまま使えます。



onClipEvent(load)
{
//表示するスライドの番号を保持
slide_no = 0;


//スライドを切り替える関数
//この関数は一定時間ごとに呼び出される
function Slide_Change()
{
//次のスライドを表示
//最後まで表示したら最初に戻る
slide_no = ( slide_no + 1 ) % numChildSlides;
gotoSlide( getChildSlide( slide_no ) );
}

//6秒ごとにスライドを切り替える関数を呼び出す
//(↑INトランジション2秒+スライド表示時間2秒+OUTトランジション2秒)
timer_id = setInterval( Slide_Change , 6000 );
}

**************************************

スライドをループさせず最後の写真で止める場合は、上記の代わりに次のスクリプトを書いてください。


onClipEvent(load)
{
//表示するスライドの番号を保持
slide_no = 0;


//スライドを切り替える関数
//この関数は一定時間ごとに呼び出される
function Slide_Change()
{
//最後のスライドだった場合は停止
if( slide_no >= numChildSlides - 1 )
{
//タイマーを削除
clearInterval( timer_id );
}
//次のスライドがある時は次を表示
else
{
slide_no++;
gotoSlide( getChildSlide( slide_no ) );
}
}

//タイマーをセット
//6秒ごとにスライドを切り替える関数を呼び出す
//(↑INトランジション2秒+スライド表示時間2秒+OUTトランジション2秒)
timer_id = setInterval( Slide_Change , 6000 );
}

***************************

スライドをループさせない場合、最初のスライドでインのトランジションが不要でしたら、イベント” reveal ”のビヘイビアを削除するとインのトランジションも消えます。
ただし、最初のスライドだけは4秒間表示されることになります。
実際はどのスライドも一律6秒間表示されているのですが、トランジションが抜けると、その分だけ、どうしても長く見えてしまいます。


スライドを切り替える間隔を変える時は、

 timer_id = setInterval( Slide_Change , 6000 );

↑の、6000 の部分を変更してください。
setInterval はミリ秒ですので、イン・アウトのトランジションにかかる秒数+スライドの表示時間に 1000 を乗算した値です。
    • good
    • 0
この回答へのお礼

前回の質問もですが、今回も、わかりづらかったようでごめんなさい。
そして丁寧な解説本当にありがとうございます。

先ほどチャレンジしてみたところ、
うまくいきました!!!

本当にありがとうございます。

自作で1から作る時間がなく今回は頼りきりになってしまったんですが
アクションスクリプトについて
少しは勉強しないといけないと思いました・・・
本当にありがとうございます!!!

お礼日時:2006/06/06 22:24

的外れならごめんなさい。



フレームレートを考慮すればスクリプトなしで実現できそうな気がします。

たとえば、フレームレートが12fpsなら、fpsは「frame per secound」つまり1秒間に12フレームなわけですから、秒間なら24フレームです。

24フレーム表示してフェードアウトしstop();するムービークリップを作れば実現できそうな気がします。

この回答への補足

ありがとうございます。
それも実はためしてみたのですが、うまくいかなかったのです・・・
もしかすると根本から間違えているのかもしれません。

24フレーム表示して、その後のフレームでトランジションを実行してみたのですが、なぜかうまくいかず・・・

補足日時:2006/06/06 13:10
    • good
    • 0

質問者のmaicocoです。


800字を超えてしまったのでここにかきます。

onClipEvent (load) {
stop();
ID1 = setInterval(function () { _root.gotoAndPlay("2");clearInterval(ID1);}, 2000);
}



on (reveal) {

// Transition behavior
if (!eventObj.target._isSlide || (eventObj.target._isSlide && eventObj.target.currentSlide)) {
mx.transitions.TransitionManager.start (eventObj.target,
{type:mx.transitions.Fade,
direction:1, duration:6, easing:mx.transitions.easing.None.easeNone,
param1:empty, param2:empty});

eventObj.target.__transitionManager._triggerEvent = eventObj.type;
}
// End Transition behavior

}

on (allTransitionsOutDone) {

// GoTo Next Screen behavior
var screen = null;
var target = this;
while((screen == null) && (target != undefined) && (target != null))
{
if(target instanceof mx.screens.Screen)
{
screen = target;
}
else
{
target = target._parent;
}
}
if(screen instanceof mx.screens.Slide)
{
screen.rootSlide.currentSlide.gotoNextSlide();
}
// End GoTo Next Screen behavior

}

--
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!