【お題】甲子園での思い出の残し方

スライドプレゼンテーションをつかって、スライドショーを作成しています。

クリックやキーボードで操作し、
スライドを変えるものではなく
時間でスライドを進めていくものを作っています。

そのスライドの表示時間を自由にいじりたいのですが
どのようにしたら表示時間を変えられるのかわかりません・・・


宜しくお願いします><;

A 回答 (2件)

スライドプレゼンテーションは、解説書などでよく見かける Flash ムービーの編集とは少し違う、独特の概念になっています。


(まあ、Flash の機能を使って作られている以上は Flash の規格からは外れていませんが)


スライドの正体は、制御用のスクリプトが組み込まれたムービークリップ(コンポーネント)です。
1枚1枚のスライドが独立したムービークリップでスライドの数だけ重なっており、表示するもの以外は非表示になっているだけです。

ムービークリップが重なっていて表示するものを切り替えるのですから、スライド間の移動は、タイムライン上でフレームを移動するように gotoAndPlay 等のタイムライン制御用のスクリプトではできません。
スライド間を移動するための専用のスクリプトは、スライド用のムービークリップに組み込まれています。

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

スライドは入れ子にすることができます。
それだけに、スライド間を移動する時はスライドの構成が問題になります。
基本的には同じ階層の間しか移動できず、異なる階層に移動するにはそれなりのスクリプトが必要です。


スライドショーとのことですので、今回は次のような構成のスライドを考えます。

 main
  ┣ photo1
  ┣ photo2
  ┣ photo3
     :

親になる main の下に子を持たないスライドが写真の数だけ並んでいるという、単純な構成です。

main の子である photo○○は、どれも子スライド( main から見ると孫)を持っていません。
写真の各スライドは全て main の階層に属していますから、移動は main 階層の中だけで考えることができます。
スライド間を移動する方法はいろいろありますが、簡単なところで、子の番号をもとに子のスライド名を取得して移動するスクリプトをご紹介します。

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

自動でスライドを切り替えるには、要するに、スライドを切り替えるスクリプトを一定時間ごとに実行する仕組みを作ればいいわけです。
一定時間ごとに何かを実行するには、#1の方がおっしゃるように、一定時間ごとに関数を自動的に呼び出してくれる setInterval が便利です。


必要なスクリプトは親スライド main のタイムラインに設定します。
下記のスクリプトは、スライドのリストで1番上にあるスライドを選び、そのタイムラインのフレーム1にキーフレームを作って設定してください。

スライドプレゼンテーションでは、リスト内にあるスライドそのものにもスクリプトを設定できます。
今回は”スライドのタイムライン”にスクリプトを書きます。
「アクション」パネルの上部に「▼ アクション - フレーム」と表示されていることを、まずご確認ください。
スライド自体に書く時は「▼ アクション - スクリーン」と表示されます。

(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)


 //表示するスライドの番号を保持
 slide_no = 0;


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

 //タイマーをセット
 //5秒ごとにスライドを切り替える関数を呼び出す
 timer_id = setInterval( Slide_Change , 5000 );


今回のスライドは先述の通り、1枚の親の下に子のないスライドだけが何枚も並んでいるという、最も単純な構造を想定しています。
上記のスクリプトでは、親スライド main の子である photo○○というスライドを5秒ごとに順番に表示します。

親スライドの持つ子スライドは、内部ではそれぞれに 0 からの通し番号が割り振られて管理されています。
例えば main の下に photo1 ~ photo5 という5枚の子スライドがあったとすると、先頭の photo1 は 0、末尾の photo5 は 4 番目の子ということになります。

5秒ごとに setInterval により呼び出される Slide_Change 関数の中で使っている getChildSlide は、指定した管理番号を持つ子のスライドを取得するメソッドです。
スライド間を移動する gotoSlide メソッドには、スライドの名前(正式には参照といいます)をパラメータとして渡さなければならないので、getChildSlide で次に表示する子スライドを取得してから gotoSlide で移動します。


今表示するスライドの管理番号は変数 slide_no に記録しておき、この値を見て該当するスライドに移動します。
slide_no の値は Slide_Change 関数が呼び出されるたびに 1 ずつ増えますが、最大でも子のスライドの総数 - 1 までしか増えず、これを超えると 0 に戻ります。
従って、最後まで表示した後は最初のスライドが表示されます。

このカラクリのタネは、

 //最後まで表示したら最初に戻る
 slide_no = ( slide_no + 1 ) % numChildSlides;

↑の、” % numChileSlides ”の部分です。

% は剰余を求める演算子です。
numChildSlides は、スライド内の子の総数が記録されているプロパティです。
例えば main の子が photo1 ~ photo5 までの5枚だとすると、main の持っている numChildSlides プロパティには 5 が入っています。
整数の計算の場合、5 の剰余は 0 ~ 4 ですから、5 の剰余を求めて slide_no の値を更新しておくと、常に 1 ずつ加算しても slide_no の値は必ず 0 ~ 4 の間に収まります。
スライドの管理番号は 0 から始まりますので、剰余の最小値が 0 である点も都合がいいのです。

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

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

 //5秒ごとにスライドを切り替える関数を呼び出す
 timer_id = setInterval( Slide_Change , 5000 );

の、5000 の部分を変更してください。
スライドを切り替える際の演出(トランジション)を入れる時は、演出にかかる時間を考慮することもお忘れなく。


トランジションは予め用意されているものがいくつかあり、「ビヘイビア」機能で簡単に適用できます。

トランジションのスクリプトはスライドの本体の方に設定します。
演出を入れたいスライドを選び、「ビヘイビア」のパネル(「ウィンドウ」メニュー→「ビヘイビア」)で”スクリーン”→”トランジション”と進むと設定できます。

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

スライドプレゼンテーション機能は普通の Flash の編集画面とは変わっていて、コツをつかむまでは取っつきにくいかもしれません。
スライドに限らずコンポーネントに関する資料は少ないので、ヘルプを見ながら自分で研究することになるかと思います。


簡単なスライドショーであれば、普通のムービークリップでも充分作れます。
トランジションも自作はいくらでも可能で、スライドプレゼンテーション機能などに頼ることなく1から自作してみると、Flash や ActionScript のいい勉強になりますよ。
普通のスライドショーの作り方はいろいろなサイトや解説書で作例が紹介されているそうですので、興味がありましたら探してみてください。
    • good
    • 0

stop();


ID1 = setInterval(function () {
_root.gotoAndPlay("2");//1秒後にするアクション
clearInterval(ID1);
}, 1000);


これで時間指定したらどうでしょう。
ミリ秒なので1000は1秒です。
これをフレームアクションに入れれば大丈夫ですよ~

もし間違ってたら誰か補足ください^^

この回答への補足

回答ありがとうございます!

フレームアクションに入れてみたのですが
エラーがでて、再生できなくなってしまいました。

初心者の質問で申し訳ないのですが・・・
上記のアクションスクリプトをコピペするだけではダメなんですよね?

補足日時:2006/05/31 16:40
    • good
    • 0

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