• ベストアンサー

ムービーを操作する方法について

毎度お世話になります。 当方アクションスクリプト初心者です。 こちらのページをご覧いただきたいのですが、 (※「CONCEPT MOVIE」ボタンから、「SMALL」「LARGE」どちらかを選択してください。) http://www2.nissan.co.jp/LAFESTA/B30/0412/CONCEPT/main1.html このイメージムービーのように、再生・一時停止・停止や、バーをドラッグして 好きな位置に移動したりする仕組みのものを作りたいと思っています。 どうぞよろしくお願いします。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.3

#1、2です。 >> ドラッグ中は停止状態にしたいのですが、 >> どのようにすれば良いのでしょうか? と書かれていますがドラッグ中は停止状態なのですが… と言うよりドラッグ中はドラッグによってアニメーションは前に行ったり後に行ったり動きますが, ドラッグ後,マウスを停止させるとアニメーションも停止しますよ。 ムービークリップの中にムービークリップを入れて動かしたり, ActionScriptで動かしているものは止まりません。 何でしたら,on (press)の所 ----------------- on (press) { _parent[mov].stop(); this.startDrag(true, l_point, this._y, r_point, this._y); this.onMouseMove = function() { now_frm = Math.round((this._x-l_point)*move_spd); _parent[mov].gotoAndStop(now_frm); }; } ---------------- 上のように 2行目 _parent[mov].stop(); を入れてみますか。 結果はあまり変わらないような気もしますが。 あと,午前中件で調べていたら,何やらこんなページを発見しました。 「イベントハンドラメソッドはdeleteで消せ!」 http://f-site.org/articles/2004/05/22140833.html う~ん,最後まで読むと結局どっち??? という感じになりますが, このメインの方の意見の通りにすると,最後のかたまりの2行目は delete this.onMouseMove; が良いということなのでしょうね。 かなり前に,onEnterFrame を消したいとき, this.onEnterFrame = undefined; と this.onEnterFrame = null; のどちらにすべきか悩んだことがあって,そのときGoogleで検索して, this.onEnterFrame = null; の方がヒット件数が多かったので,以降同じような場所で null を使うようにしていたのですが, 本当は,delete this.onMouseMove; が良いのかもしれません。 ちょっとずつ訂正すると,「結局どれ?」となるので,最初から全文を書くと次のようになります。 -------------------------- onClipEvent (load) { //アニメMCのインスタンス名の設定("" 内は可変) mov = "mc_movie"; //バーのインスタンス名の設定("" 内は可変) bar = "mc_bar"; l_point = _parent[bar]._x; r_point = l_point+_parent[bar]._xscale*2; this._x = l_point; } onClipEvent (enterFrame) { total_frm = _parent[mov]._totalframes; move_spd = total_frm/(_parent[bar]._xscale*2); this._x = l_point+(_parent[bar]._xscale*2)/total_frm*_parent[mov]._currentframe; } on (press) { _parent[mov].stop(); this.startDrag(true, l_point, this._y, r_point, this._y); this.onMouseMove = function() { now_frm = Math.round((this._x-l_point)*move_spd); _parent[mov].gotoAndStop(now_frm); }; } on (release, dragOut) { delete this.onMouseMove; _parent[mov].play(); stopDrag(); } -------------------------- 最後のかたまりの1行目を上のように on (release, dragOut) とした場合は,「目盛り 兼 コントローラー」の ┃(線) の横に大きめに透明な塗りを作ってください。 こんな感じ↓かもっと広く。 ┌──┳──┐ │透明┃透明│ └──┻──┘ でないと,「目盛り 兼 コントローラー」がマウスの動きについて行けなくなったとき, dragOut になってしまいます。 最初に書いた on (release) では透明部分も少なくでき,問題ない場合もありますが, 「目盛り 兼 コントローラー」がムービーの縁に近い所にあった場合, マウスをプレスしたまま,マウスをムービー外に出す可能性が大きくなります。 マウスをプレスしたまま,マウスをムービー外に出すと delete (this.onMouseMove); が効かなくなります。 従って, on (release, dragOut)  で 「目盛り 兼 コントローラー」の横の透明部分を増やすのが無難かもしれません。

gonagona
質問者

お礼

大変わかりやすくご説明いただき、本当にありがとうございました! なるほど、透明な塗りがミソなんですね(^^)/ 全て上手くいきました! またご迷惑をお掛けすることもあると思いますが、 そのときはどうぞ宜しくお願いいたします。

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

その他の回答 (2)

noname#35109
noname#35109
回答No.2

#1です。 >>マウスアップしてもドラッグした状態と同様に >>mc_movieが目盛りにくっ付いてきてしまいます・・・。 ということですが, スクリプトの最後のかたまり ------------------------- //マウスアップしたときの処理 on (release) {    this.onMouseMove = null;    _parent[mov].play();    stopDrag(); } ------------------------- が原因だとおもいます。 this.onMouseMove = null; が働いていないわけです。 この部分の1行目 on (release) {    ↓ on (release, dragOut) { と変更してみてください。 dragOutする可能性があることを忘れていました。

gonagona
質問者

お礼

早速ご回答いただきありがとうございます! 無事マウスアップ時には動作しないようになりました! お手数お掛けしますが、最後に1点だけお教えください。 現在ですと、目盛りmcを押した状態でも、 目盛りmcとmc_movieが再生され続けてしまいます。 これを、ドラッグ中は停止状態にしたいのですが、 どのようにすれば良いのでしょうか? 質問攻めで申し訳ありません・・・! 宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.1

一応,スクリプトをコピペするだけで汎用的に使えるようなものを考えてみました。 ロード状況を示すバー(バーの伸び縮み)は,今回,考慮していません。 スライドバーを左右に動かすとMC(ムービークリップ)のムービーのフレームをコントロールする部分だけです。  ~完成予想図~~~  ┌────┐  │ムービー │ ←インスタンス名:mc_movie  │  (MC) │  └────┘   ╋━━━━ ←インスタンス名:mc_bar   ↑目盛り 兼 コントローラー ◎ 用意する物  (1) アニメーションするMC    仮インスタンス名:mc_movie  (2) スライドバーのバーの部分    仮インスタンス名:mc_bar  (3) 目盛り 兼 コントローラー(MC)    インスタンス名:特に不要 ◎ (1)~(3)の各説明 (1) アニメーションするMC  1つのムービークリップ内にコントロールしたいアニメーションムービーを作ってください。  アニメーションさせる方法は,モーショントゥイーンなどタイムラインを使ったアニメーションにしてください。フレーム数は任意でかまいません。  コントローラーではMC内のフレームの動きを制御するので,ActionScriptで動かすアニメーションには対応していません。  作成できたら,一応,仮のインスタンス名を mc_movie にしてください。後で変更可です。 (2) スライドバーのバーの部分  (1)で作ったMCの横幅くらいに合わせたバーを書いてください。単なる線でもかまいません。バーの長さや装飾も後に変更できるので適当で良いです。  バーを作ったらそれをムービークリップシンボルに変換してください。  変換したらムービークリップの基準点(中心の丸いもの)を線の左端に動かしてください。  (「修正」→「変形」→「自由変形」などで,中央の○が動かせます。)   作成できたら一応,仮のインスタンス名を mc_bar にしてください。後で変更可です。 (3) 目盛り 兼 コントローラー   ┃←こんな感じのものを作ってください。単なる縦の短い線でもかまいませんが,その場合動き出すとマウスで捕まえにくいので,周りに 20×20ピクセル以上の透明な塗りを書いた方が良いです。正方形の透明な塗りの中央に┃(線)を引く感じがいいです。  できた「目盛り 兼 コントローラー」は,(2)で作ったバーの横当たりに置いてください。バーに近ければどこでも良いです。  メインはこの「目盛り 兼 コントローラー」です。この「目盛り 兼 コントローラー」に以下のようなスクリプトを書けば出来上がりです。 ---コピペ可----------------------- onClipEvent (load) { //アニメMCのインスタンス名の設定("" 内は可変) mov = "mc_movie"; //バーのインスタンス名の設定("" 内は可変) bar = "mc_bar"; l_point = _parent[bar]._x; r_point = l_point+_parent[bar]._xscale*2; this._x = l_point; } onClipEvent (enterFrame) { total_frm = _parent[mov]._totalframes; move_spd = total_frm/(_parent[bar]._xscale*2); this._x = l_point+(_parent[bar]._xscale*2)/total_frm*_parent[mov]._currentframe; } on (press) { this.startDrag(true, l_point, this._y, r_point, this._y); this.onMouseMove = function() { now_frm = Math.round((this._x-l_point)*move_spd); _parent[mov].gotoAndStop(now_frm); }; } on (release) { this.onMouseMove = null; _parent[mov].play(); stopDrag(); } ------------------------------- 「スライドバーのバーの部分」のインスタンス名と「アニメーションするMC」のインスタンス名を他の名前にしたいときは mov = "mc_movie"; と bar = "mc_bar"; の部分を各名称に合わせればそれで使えます。 アニメーションの長さや大きさ(縦横サイズ)は全てスクリプト内でキャッチするようにしてあるので,他に変える場所はとくにありません。 この,「目盛り 兼 コントローラー」を取っておけばどこでも使い回せると思います。 ※loadMobieなどで読み込んだムービーにも対応していると思います。   mc_movieを小さめのMCにして,_rootのタイムラインに,   loadMovie("○○.swf", "_root.mc_movie");   などと書けば外部SWFが読み込めます。   ただしロードされた割合でバーは伸び縮みはしません。 ◎ 上記スクリプトの説明 ---全角空白があるためそのままコピペは不可--- onClipEvent (load) {    //アニメMCのインスタンス名の設定    mov = "mc_movie";    //バーのインスタンス名の設定    bar = "mc_bar";    //バーの左端ポイントの座標を取得    l_point = _parent[bar]._x;    //バーの長さを取得    r_point = l_point+_parent[bar]._xscale*2;    //この「目盛り 兼 コントローラー」をバーの左端座標にセット    this._x = l_point; } //アニメMCのフレームよってこのMCの位置を変える部分 onClipEvent (enterFrame) {    //アニメMCのフレーム数を取得    //(loadMovie対応のためここに書いています)    total_frm = _parent[mov]._totalframes;    //アニメMCのフレーム数/バーの長さを計算    //(loadMovie対応のためここに書いています)    move_spd = total_frm/(_parent[bar]._xscale*2);    //このMCの位置を変える    this._x = l_point + (_parent[bar]._xscale*2)/total_frm*_parent[mov]._currentframe; } //このMCの位置によってアニメMCのフレームを変える部分 on (press) {    //ドラッグできる座標を限定    this.startDrag(true, l_point, this._y, r_point, this._y);    //このMCが動くとその座標によってアニメMCを制御    this.onMouseMove = function() {       now_frm = Math.round((this._x-l_point)*move_spd);       _parent[mov].gotoAndStop(now_frm);    }; } //マウスアップしたときの処理 on (release) {    this.onMouseMove = null;    _parent[mov].play();    stopDrag(); } ----------------- 説明がうまくありませんがこんな感じでできます。  //(loadMovie対応のためここに書いています) の部分は本来上の,onClipEvent (load) {} の方に入れるべきですが, loadMovieを使用した場合,それではうまく値が得られないので, onClipEvent (enterFrame) {} に入れています。 その他難しいスクリプトは使っていません。 各プロパティを変数化して四則演算しているだけなので,よく見ればわかると思います。 こんなような感じで考えて行けば, 他にも「MCのスクロールバー」や, 「オブジェクトの拡大縮小バー」など色々できます。 =============================== ちなみに一時停止ボタンや再生ボタンは簡単ですよね。 ---一時停止ボタン--------- on (release) { _root.mc_movie.stop(); } ----------------------- ---再生ボタン------------ on (release) { _root.mc_movie.play(); } ----------------------- こんな感じでできます。 さらにちなみに, ---早送りボタン------------ on (press) { this.onEnterFrame = function() { _root.mc_movie.gotoAndPlay(_root.mc_movie._currentframe+2); }; } on (release, dragOut) { this.onEnterFrame = null; } ----------------------- ---早巻き戻しボタン------- on (press) { this.onEnterFrame = function() { _root.mc_movie.gotoAndStop(_root.mc_movie._currentframe-2); }; } on (release, dragOut) { this.onEnterFrame = null; _root.mc_movie.play(); } ----------------------- みたいな感じです。

gonagona
質問者

お礼

大変分かりやすくご説明いただきありがとうございます! 早速コピペで試したのですが、 マウスアップしてもドラッグした状態と同様に mc_movieが目盛りにくっ付いてきてしまいます・・・。 シーン1にmc_movie、mc_bar、目盛りmcをそれぞれ別レイヤーに配置し、目盛りmcにお教えいただいたアクションを貼り付けた形です。 色々試してみたのですが原因がわからず、 お手数ですが再度お力をお貸しください。。 尚、遅れましたが、当方MX2004 proを使用しております。

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

関連するQ&A

  • Flashでムービークリップを常に上に表示する方法

    Flashの初心者で、次のことにつまずいています。 初心者のためにわかりやすく教えていただけたら助かります。 複数のムービークリップ(MC)があるとします。 その中のMCの1つをドラッグして他のMCに重なったときに、ドラッグしたMCが常に他のMCの上に表示されるようにしたいのですが・・・。 どのMCをドラッグした場合でも、他のMCの上に表示されるようにしたいです。 Flashのバージョンは、CS5.5で、アクションスクリプト2.0を使用しています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FLASHで作ったムービーをクリックしてから再生するように設定したい

    ごらん頂有難う御座います。 DREAMWEAVERを使ってホームページを作っております、 その中にFLASHで作ったムービーを挿入し、そのムービーをクリックしてから再生をしたいのですがなかなかうまくいきません。 ムービーの最初のフレームをボタン・シンボルにして、そのボタンにアクションスクリプトを入れてもエラーが出てしまいます。 ちなみに on (press) { this.play(); } と記述しました。 半日この件で潰れてしまいました、宜しくお願い致します。

  • 深い階層でのムービークリップの操作について

    関連した質問で恐縮です。 ・シーン1   ┗Thumb_nail(ムービーインスタンス)     ┗スクロールバー( sc_ bar )     ┗ sheet(ムービーインスタンス)       ┗target(画像読み込み用ダミームービーインスタンス) targetを複製しながらJPEGファイルを読み込んでいます。(ファイルが存在するまで) そのScriptは全てThumb_naliのタイムラインのアクションです。 <1フレーム> var i = 1 ; var e_flg = 0 ; function Sheet_Scrolling() { sheet._x = sc_bar.getScrollPosition()*(-1) + 0 ; } sc_bar.setChangeHandler("Sheet_Scrolling"); <3フレーム> var fileload:LoadVars = new LoadVars(); fileload.load("b"+i+".jpg"); fileload.onLoad = function(success:Boolean) {  if (!success) {   e_flg = -1;  }  else {   e_flg = 1 ;  } }; <5フレーム> switch(e_flg ) {  case 0:   gotoAndPlay(4) ;   break ;  case 1 :   sheet.target.duplicateMovieClip("b" + i, i) ;   sheet["b" +i].loadMovie("b" + i+ ".jpg") ;   sheet["b" +i]._name = "b" + i ;   sheet["b" +i]._x += (i - 1) * 90 ;   i++ ;   e_flg = 0 ;   gotoAndplay(3) ;   break ;  case -1:   sc_bar.setScrollProperties(50, 0, (i-1)*90-360);   stop() ;   break;  default:   break ; } ここからが本題なのですが、読み込んだJPEGが押下された時のアクションはどこでどのように記述するのかご教授願えませんでしょうか?。(試した内容は文字数制限で書けません。)

    • ベストアンサー
    • Flash
  • FLASHでボタンを押すと、FLASHムービーが再生から停止までいくようにしたいです。

    FLASHの初心者です。 以下の物が作りたくてチャレンジをしております。 構成的には、一個の画面と、一個のボタンがあり、 あらかじめFLASHムービーを何個か作り、 一個のFLASHファイルに読み込んで、 ボタンを押すと一個目のムービーが再生、最終フレームで停止、 もう一回ボタンを押すと次のムービーが再生、最後… という具合にしていきたいです。 おそらくアクションスクリプトを使用して作らなければならないと 思うのですが、うまくできないのです… ついでにもう一つ、お聞きしたいことがあります。 フレーム数を右下に常に表示させたいです。 この方法も教えて欲しいです。 使用ソフトはFLASH CS3で、アクションスクリプトは3.0を使っています。 説明下手ですみません… よければ誰か助けてください>△<

  • 一定時間経過後、ムービー再生する方法を教えていただけますでしょうか?

    FLASHのAction Script(setInterval?)について質問です。 現在タイムラインに4つのラベル(A,B,C,D)を指定して、順次A→B→C→D→A→(以下省略)へとループするムービーを制作しております。 次のラベルへと進む時間間隔をスクリプトで制御する方法を教えていただけますでしょうか。 例:) A→(10秒静止後)→B  上記の10秒となっている部分をスクリプトにて制御出来ればと思っております。 また、上記のムービー上に配置してあるボタンにオンマウスで、上記のカウントをリセットしてムービー停止、 マウスアウトで次のラベルへ進める方法も併せて教えていただきたくお願い申し上げます。 何卒、宜しくお願い致します。

  • ムービーのコントロールについて教えてください。

    ムービーのコントロールについて教えてください。 私は、フラッシュCS5を使用し、アクションスクリプト3.0で記述しています。 ムービーコントロールについて教えていただきたくてこちらに書き込みをさせていただきました。具体的には、ステージにムービー(インスタンス名:FLV_Play01)を読込み、そのムービーの上に再生ボタン(インスタンス名:Btn_1)を設置しました。添付画像をご覧ください。 ステージのタイムラインの1フレームに下記のようにスクリプトを記述しました。 import flash.events.MouseEvent; Btn_1.addEventListener(MouseEvent.CLICK, fl_ClickToPlayVideo); function fl_ClickToPlayVideo(event:MouseEvent):void { FLV_Play01.play(); } function removeMC(ev:MouseEvent):void{ removeChild(Btn_1); } Btn_1.addEventListener(MouseEvent.CLICK,removeMC); この記述ですと、ムービーの再生ボタン(インスタンス名:Btn_1)をクリックするとムービー(インスタンス名:FLV_Play01)がスタートして再生されます。再生と同時に再生ボタンが消去され、ムービーだけの表示となります。ただ、このスクリプトですと、ムービーが終了した後には再生ボタンが再表示されない為に繰り返し見る事が出来ないのです。 そこでですが、ムービーの再生終了後に再び再生ボタンを表示させるようにしたいのです(ユーチューブのようなイメージです)。そのためのスクリプトを記述したいのです。どなたか解る方がいましたらスクリプトの記述内容を教えてください。よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 2つのムービークリップをスクリプトを利用して同時に止めたいのですが、、。

    はじめまして。私はスクリプトは初心者なのですが、2つのムービークリップが同時に進行してまして、同じタイムラインの長さなのですが、ずれないように同じ長さにしております。そのひとつがボタンになっているのですが、このボタンにロールオーバーした時、またはムービークリップのほうにロールオーバーした時に両方ともに一時停止してほしいのです。ロールアウトしたら2つとも動き出し、つぎのムービークリップに行ったとき、同じようにボタンも色が変わって常に同時進行してる状態を作りたいのですが、どうすれば良いか、だれか詳しい方教えていただけないでしょうか。よろしくお願いいたします。

  • Quick time ムービーのコントロールを消すには?

     Quick time Player のムービーで動画を再生しているのですが、画面下のコントロール(再生や一時停止などができるバー)を消すことができません。  再生した動画を見ているとこれが画面にかぶさっていて邪魔なのですが、これを隠すにはどうしたらいいでしょうか?   バージョンは2です。それから画面を縦にデジカメで撮影したものを再生すると横になってしまうのですが、これをPC上で直す方法はありますか?  

  • ムービークリップを一定時間ごとに実行したい。

    ムービークリップを読み込むと、タイムラインに関係なく動き続けるかとおもいますが、それを時間、もしくはフレームごとに動きを止めて再度動かすような動きはスクリプトでどのようにかくのでしょうか? 作りたいアクションは、画面左からスライドして入ってきて、真ん中で減速しながら停止、3秒ほど待って、今度は加速しながら画面右にスライドしていく動きを作りたいです。 flashMx2004、windowsXPです。

    • ベストアンサー
    • Flash
  • 回転運動の減速停止方法

    こんにちは。以下の動作のアクションスクリプトを教えて 頂きたいと思い、書き込み致しました。 「回転 停止」というキーワードで過去質問を検索しましたが、 見つけることができませんでした。 よろしくお願い致します。 --------------------------------- http://hakuhin.hp.infoseek.co.jp/main/as/move.html#MOVE_04 ↑こちらで紹介されております「円の動きを作りたい 」で、  ある一定の角度(例えば300度とか)まで回転したら停止する  動きを制作したいと思っております。 また、停止する際に、 http://hakuhin.hp.infoseek.co.jp/main/as/move.html#MOVE_02 ↑こちらで紹介されております「減速(摩擦)する動きを作りたい 」  で、減速させて停止する動きが付けられればと思っております。 --------------------------------- 「300度回転してから減速して停止」という動きであれば、 上記サイトで公開されておりますスクリプトの形式でなくても 問題ありません。 お手数ですが、よろしくお願いします。 最後にこちらの環境です。 ------------------------ アクションスクリプト経験 :回転運動、曲線運動などは初めて挑戦。 マシン環境 :WinXP FLASH8 ------------------------ 以上、よろしくお願い致します。

    • ベストアンサー
    • Flash