• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スライドの表示時間を指定した後にトランジション)

Flashでのスライドショー作成についての質問

このQ&Aのポイント
  • Flashの初心者がスライドショーを作成する際に表示時間とトランジションを設定する方法が分からない。
  • setIntervalのスクリプトを使用して表示時間を設定したが、ループしてしまい点滅してフェードアウトしてしまう。
  • 他の方法も試してみたがうまくいかず、どのようなアクションスクリプトを使えば良いか教えて欲しい。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.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 を乗算した値です。

maicoco
質問者

お礼

前回の質問もですが、今回も、わかりづらかったようでごめんなさい。 そして丁寧な解説本当にありがとうございます。 先ほどチャレンジしてみたところ、 うまくいきました!!! 本当にありがとうございます。 自作で1から作る時間がなく今回は頼りきりになってしまったんですが アクションスクリプトについて 少しは勉強しないといけないと思いました・・・ 本当にありがとうございます!!!

その他の回答 (2)

  • chem_taro
  • ベストアンサー率32% (33/101)
回答No.2

的外れならごめんなさい。 フレームレートを考慮すればスクリプトなしで実現できそうな気がします。 たとえば、フレームレートが12fpsなら、fpsは「frame per secound」つまり1秒間に12フレームなわけですから、秒間なら24フレームです。 24フレーム表示してフェードアウトしstop();するムービークリップを作れば実現できそうな気がします。

maicoco
質問者

補足

ありがとうございます。 それも実はためしてみたのですが、うまくいかなかったのです・・・ もしかすると根本から間違えているのかもしれません。 24フレーム表示して、その後のフレームでトランジションを実行してみたのですが、なぜかうまくいかず・・・

回答No.1

質問者の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 } --

関連するQ&A