• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スライドプレゼンテーション機能を使ったときのボタンでのフレーム操作)

スライドプレゼンテーション機能でのボタン操作

このQ&Aのポイント
  • マックでFlash MX Professional 2004を使用しています.新たに追加されたスライドプレゼンテーションのインターフェースでプレゼンを作成しているのですが,stop();やgotoAndPlay()が反映されません.
  • ステージ全体を覆う形で透明のボタンを作り,そこをクリックすると(すなわち画面のどこかをクリックすれば)あるフレームにとばしたいのです.
  • Professionalのスライドプレゼンテーションではうまくはたらいてくれません.このスライド機能を使ったテンプレートも付属されていて,その中にNEXTボタンとBACKボタンが搭載されています.スクリプトを見てみるとかなり複雑な感じで,理解できませんでした.

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

スライドプレゼンテーションの使い方は、私も勉強中であまり詳しくはありませんが。 ボタンが押された時、同じスライド内の特定のフレームにジャンプしたい場合は、  clickboard3.onRelease = function ()  {   gotoAndPlay( "scene4" );  }; (↑各行頭に全角のスペースが入っています。コピーする際はご注意ください) で、いかがでしょう。 ムービークリップはタイムラインを持っているため、gotoAndPlay や gotoAndStop で自分自身のフレームに移動することができます。 しかし、ボタンシンボルにはタイムラインがないので、ムービークリップとは違い、1つの階層とは見なされません。ボタンで、階層を相対パスで指定するアクションを利用するには注意が必要です。 ボタンで実行するアクションでターゲットパスを省略すると、ムービークリップでは自分自身を指しますが、ボタンの場合は、ボタンが存在するタイムライン、つまり親の階層になりますし、_parent を付けると、親の更に親の階層の指定になってしまいます。 MX Professional 2004 で取り入れられたスライド機能は、普通の Flash ムービーとは違って、シーンの概念がありません。 その代わり、スライド単位で移動する専用のスクリプトが用意されています。 普通のムービーで使われる、いわゆるシーンは、階層構造になっていないので、単純にシーン名を指定するだけでシーン間を移動できます。 しかし、スライドでは複数のスライドを入れ子にして管理できるため、そう簡単にはいきません。特に、違う親スライドが持っている子スライドや、自分と同じ親の別の子スライドに移動する場合などは、移動先のスライドのターゲットパスを正確に指定する必要があります。 スライドの制御には、主に Slide クラスを利用します。スライド間を移動するには、次のスライドに移動する gotoNextSlide 、前のスライドに移動する gotoPreviousSlide 、指定のスライドに移動する gotoSlide メソッドを利用します。 スライド間の移動は少々複雑なので、よく分からなければ、「ビヘイビア」でスクリプトを自動で作成するのも1つの手です。 移動に利用したいボタンを選び、「ビヘイビア」で、「スクリーン」→「スライドに移動」を選ぶと、スライド間を移動するスクリプトが挿入されます。 また、スライドのリストからスライドを選んで、「ビヘイビア」の「スクリーン」→「トランジョン」を選択すると、スライドが切り替わる時の演出を簡単に追加することもできます。 「ビヘイビア」で追加されるスクリプトは、mx クラスという外部クラス(ヘルプに載っていないクラスです)を利用している上に、汎用的に利用できるように組まれているので、解析するのは難しいです。 まあ、プレゼンの資料に使いたいだけなら、さしあたって無理に理解しようとしなくても問題はないと思います。 スクリプトを自前で組む際、目的のスライドまでのターゲットパスが分からない時は、「アクション」ウィンドウにある「ターゲットパスを挿入」機能(ウィンドウ上部に並んだアイコンの、中央のアイコン)を利用して挿入すると便利です。 アイコンをクリックするとリストが出てくるので、目的のスライドを選択してください。そのスライドまでのターゲットパスが挿入されます。 -------------- Flash 5 までは、ボタンにスクリプトを設定するには、  on(release)  {   ・・・  } このように、on アクションを利用し、オブジェクトアクションとして記述する方法しかありませんでした。 次の世代である Flash MX からは、  インスタンス名.onRelease = function()  {   ・・・  }; と、イベントが起きた時に呼び出される関数を定義するスタイルが登場しました。書き方が違うだけで、機能は on アクションと同じです。 on*** = function()・・・のスタイルの利点は、今まではオブジェクトアクションとしてしか書けなかったスクリプトを、フレームアクションとしても記述できるようになったことです。 on や onClipEvent は、文法上、インスタンスにしか記述できません。 例えばマウスのボタンの押下を検出したい場合、mouseUp や mouseDown というムービークリップのイベントを利用しますが、onClipEvent でこれらを利用するなら、ダミーのムービークリップを用意し、非表示にしてステージのどこかに置いておかなければなりません。 しかし、onMouseUp や onMouseDown を使えば、_root のマウスボタンイベントを利用することもできますし、createEmptyMovieClip で空のムービークリップを作り、フレームに onMouseUp か onMouseDown で処理を定義することも可能です。つまり、ステージにダミーのムービークリップを隠しておく必要はありません。 また、ムービークリップやボタンが多数あって、イベントが起きた時に全てで同様の処理をしたい場合、1つ1つに on アクションでオブジェクトアクションとして処理を定義するのは大変です。 このような時は、固有の名前+通し番号でインスタンス名を付けると、  for( i = 1 ; i <= 5 ; i++ )  {   this[ "clip" + i ].onRelease = function()   {    ・・・   };  } このように、ループを利用して、ムービークリップやボタンが押された時の処理を一気に定義することもできます。 複数のインスタンスへ個別に指示を出す場合でも、1つのフレームにまとめて定義しておけますから、スクリプトがあちこちに分散せず、管理もしやすくなります。 on*** = function・・・のスタイルは、従来の on や onClipEvent の代わりとしてだけでなく、ステージにオブジェクトとしての実体を持たないもののイベントを処理するためにも利用されます。 JPEG 画像や swf ファイルを読み込む、MovieClipLoader というクラスがあります。このクラスはスクリプトの中だけに存在するオブジェクトで、ステージに実体はありません。 実体がないので、on や onClipEvent を利用してオブジェクトアクションは設定できませんが、onLoadStart = function ・・・や onLoadInit = function ・・・と、on*** = function の形式で、イベント発生時の処理をフレームアクションとして定義しておくことができます。 なお、MX 以降でも、従来通り on や onClipEvent は利用可能です。 万能に見える on*** = function のスタイルですが、実は欠点もあります。 MovieClip.loadMovie で画像やムービーを読み込んだ時、先に on*** = function で定義しておいた処理は、ロード完了時にクリアされて無効になってしまいます。 また、duplicateMovieClip で複製したムービークリップには、コピー元が持っていた変数等は継承されません。on*** = function で定義した処理も一種の変数のようなものですので、継承されません。 いずれの場合も、予め onClipEvent で処理を定義しておくと、ロード完了後やコピーされたムービークリップにも同じ処理が継承されます。 どちらの書き方にも一長一短がありますので、状況に応じて使い分けてください。 長くなってすみませんでした。

tda
質問者

補足

素早い&丁寧な回答どうもありがとうございます!! 後半の説明かなり勉強になりました。教則本といったりきたりでやっと理解できる程度ですが。 >「しかし、onMouseUp や onMouseDown を使えば、_root のマウスボタン >イベントを利用することもできますし、createEmptyMovieClip で空のムービークリップ >を作り、フレームに onMouseUp か onMouseDown で処理を定義することも可能です。 >つまり、ステージにダミーのムービークリップを隠しておく必要はありません。 の部分から下が実際どういうスクリプトうてばいいのか、うまくつかめません。でもこれかなり便利そうですね。画面のどこかをクリックしたらここへ移動!っていうのがボタン作る必要なく、スクリプト上だけですんでしまうんですよね。後述のwhileスクリプトとからめて使う感じですよね? スライドがらみのスクリプトはまだわからない部分が多いみたいですね。 >スライド間の移動は少々複雑なので、よく分からなければ、「ビヘイビア」でスクリプトを自動で作成するのも1つの手です。 この方法でやってみたところなんとか上手にいきました!!ありがとうございます。 で、今度は目的のスライドに移ろうと思って「スライドに移動」ビヘイビアを使ってみたんですが、スクリプトエラーがでて、「')'が必要です」とでてしまいます。ビヘイビアしか使ってないので、たぶんバグかと思います(実際に閉じ括弧の数は合っている)。かなり困っています。フレームラベルでの移動はタイムラインの次元をどこに指定してもうまくいかない感じです(私のスクリプティグが間違っている可能性あり)。なにか方法はあると思いますか?あるいはフレームラベル正しく設定すれば成功するのでしょうか? もう一つ、30フレーム規模のアニメーションで構成されたムービークリップをスライドにそのまま配置したが、プレビューでそのステージに進んだときには既にそのアニメーションがスタートしており、途中から流れてしまう。それをそのスライドに来るまで止めておいて、きたらスタートという風にしたいが、どんなスクリプトを書けばいいのか、というところがわかりません。かなり基本的なことなはずなんですが、いろいろやってみてもだめでした。if条件文を使うんでしょうか? ついでにもう一つの謎。スライドプレゼンテーションのときの基準点と普通のタイプのときの基準点が違う。スライドの基準点を左上端にしたいんですが、自動吸着で右上を選択してもそうはならない。普通のタイプでつくったタイムラインのフレームをすべてスライドプレゼンタイプにコピーアンドペーストすると、ペースト先の基準点が異なるためすべてのフレームの位置がずれる。画面サイズはどちらのタイプでも同じです。スライドプレゼンの基準点を普通のタイプの基準点と同じにすることってできないんでしょうか? かなり長くなってしまいました。すいません。

すると、全ての回答が全文表示されます。

関連するQ&A