みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ループ再生のflashをタイムラインの途中から再生

AdobeのFlashを使って他人の作ったflashの編集をする事になったのですが、ActionScriptについての知識がほとんどなく困っています。

アルファの白い画面→''画像が表示''→アルファの白い画面→ループ、頭に戻る
この動きの繰り返しの中で画像が1→2→3と変化します。
(タイムラインの1フレーム目で画像が切り替わるようになっています。)

asの部分にはこう書かれています
--------
if( loop_cnt == undefined || loop_cnt>mcimg._totalframes)
{loop_cnt = 1;}
---------
(内容と無関係だったらすみません><解読は出来ていない状態です)

このflashの始まりを、上記の''画像が表示''の部分から始まるように変更したいです。
(flashを途中から再生させる→ループで頭に戻る→その後はそのまま全てのタイムラインをループ)
ActionScriptでこのような命令をする方法があれば教えて頂きたいのですが・・・
投稿も初めてなので記述に至らない点が多いかと思いますが、何卒よろしくお願い致します。

投稿日時 - 2011-05-19 04:47:59

QNo.6747781

困ってます

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

#1で回答した者です。

#1の回答では
> if( loop_cnt == undefined || loop_cnt>mcimg._totalframes)
> {loop_cnt = 1;}
これがご質問の本題に関係があるものとして
そこからムービーの構造やしくみを私が勝手に想像した上での回答です。


仮にご質問中の
> if( loop_cnt == undefined || loop_cnt>mcimg._totalframes)
> {loop_cnt = 1;}
これはなかったものとします。

そして
> (flashを途中から再生させる→ループで頭に戻る
> →その後はそのまま全てのタイムラインをループ)
だけにシンプルに答えるとします。

その場合はスクリプトを次のようにすれば良いと思います。

再生させるタイムラインのフレーム1に書くスクリプトです。
(_rootを再生させるなら_rootのタイムラインのフレーム1に書くスクリプトです。)
(ムービークリップ内を再生させるならムービークリップ内のタイムラインのフレーム1に書くスクリプトです。)


-----------------------------------
//再生開始フレームを設定(4は例えばの例)
var start_frm = 4;

//もし変数 play_flag が未定義であれば
if (play_flag == undefined) {
//変数 play_flag を true と定義
var play_flag = true;
//このタイムラインをこのフレームで停止
this.stop();
//---ロード待ち処理------
//毎フレーム実行するメソッドを定義
this.onEnterFrame = function() {
//このタイムラインが指定フレームまでロードされたら
if (this._framesloaded>=start_frm) {
//指定フレームより再生開始
this.gotoAndPlay(start_frm);
//毎フレーム実行するメソッドを削除
delete this.onEnterFrame;
}
};
}
-----------------------------------


#1 と同じく,一応
Flash MX 以上(MX,MX2004,8,CS3,CS4,CS5,CS5.5 のいずれか)をお持ちで
ActionScript 1.0 (または 2.0) を使う設定で
Flash Player 6 以上用の SWF をパブリッシュするものと想定しています。

投稿日時 - 2011-05-19 18:36:51

補足

情報が足りない中で的確な推測、丁寧なご回答本当にありがとうございます。

Flash CS3,ActionScript 2.0を使っています。
最初にお伝え出来ず申し訳ございませんでした。

実は問題のflashには多くのムービークリップやボタンなどが組み込まれており、それらの実行のタイミングが1フレーム目に指定され、尚かつ全体のアルファと連動している為、モーショントゥイーンで作り直す事ができずに困っていました。

色々調べても類似の記事が無かった為、他の人の参考にもなるようなるべくシンプルな質問内容にしようとした事で、逆に手間を取らせてしまいました


(flashを途中から再生させる→ループで頭に戻る→その後はそのまま全てのタイムラインをループ)
この質問にお答え頂いた#2の回答が非常に参考になりました。

#2ご回答の通り書き足してflashを書き出した所
希望の 途中から再生し、全ループするflashができました。
本当にありがとうございました。

投稿日時 - 2011-05-19 21:26:37

お礼

お礼を書く場所を間違えてしまいました><
本当にありがとうございました!

投稿日時 - 2011-05-19 21:28:02

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

とりあえず,
具体的状況(ムービーの構造など)がわかりません。
以下は私が勝手に推測した(決めた)状況での回答です。

また,お持ちの Flash のバージョンも
ご使用の ActionScript のバージョンすらも書かれていらっしゃらないため本来は全く回答できません。
が,mcimg._totalframes と書かれていらっしゃる部分から少しは推測できます。

この部分から
ActionScript のご使用バージョンは少なくとも 3.0 ではないということがわかります。

またこの部分から
ステージ上には内部が複数フレームからなる「mcimg」というインスタンス名を付けたムービークリップが存在していて
ActionScript でその「mcimg」内の表示フレームを切り替えているのではないかとも推測されます。


ムービークリップ「mcimg」の内部の各フレームには
「単なる画像」が置いてあるだけであるものとします。
つまり
ムービークリップ「mcimg」の内部の各フレームには
内部で フェードイン/アウト するムービークリップは置いていないものとします。
(つまり,ムービークリップ「mcimg」の内部には フェードイン/アウト する仕組みが何も仕組まれていないものとします。)

また,ムービークリップ「mcimg」を フェードイン/アウト させること以外のスクリプトは存在しないものとします。

その場合
スクリプト全文を次のようにすれば
> ''画像が表示''→アルファの白い画面→ループ
のようなものができると思います。

-----------------------------------
//フェードアウト/インさせるスピードを設定
var fade_spd = 4;

//完全表示させる秒数を設定
var show_sec = 2.5;

//変数 loop_cnt が未定義であれば
if (loop_cnt == undefined) {
//変数 loop_cnt の値を1にする
loop_cnt = 1;
//±を決める変数を用意
plus_minus = -1;
//「mcimg」内の再生を停止
mcimg.stop();
//「mcimg」のアルファを100にする
mcimg._alpha = 100;
//
//繰り返して遅延実行
var ID = setInterval(function () {
//関数fadeOutInを毎フレーム実行
mcimg.onEnterFrame = fadeOutIn;
//遅延実行の繰り返しをやめる
clearInterval(ID);
}, show_sec*1000);
}

//フェードアウト/インさせる関数を定義
function fadeOutIn() {
//
//「mcimg」をフェードアウト/イン
mcimg._alpha += plus_minus*fade_spd;
//
//「mcimg」のアルファが0以下になれば
if (mcimg._alpha<=0) {
//loop_cnt の値が「mcimg」内のフレーム数以上になれば
if (loop_cnt>=mcimg._totalframes) {
//loop_cnt の値を1に戻す
loop_cnt = 1;
} else {
//それ以外は loop_cnt の値に1を加算
loop_cnt++;
}
//
//「mcimg」内のフレームをloop_cntフレームに進めて停止
mcimg.gotoAndStop(loop_cnt);
//±を決める変数を+にする
plus_minus = 1;
//「mcimg」のアルファが100以上になれば
} else if (mcimg._alpha>100) {
//関数fadeOutInを毎フレーム実行するのを解除
delete mcimg.onEnterFrame;
//±を決める変数を-にする
plus_minus = -1;
//
//繰り返して遅延実行
ID = setInterval(function () {
//関数fadeOutInを毎フレーム実行
mcimg.onEnterFrame = fadeOutIn;
//遅延実行の繰り返しをやめる
clearInterval(ID);
}, show_sec*1000);
}
}
-----------------------------------


一応
Flash MX 以上(MX,MX2004,8,CS3,CS4,CS5,CS5.5 のいずれか)をお持ちで
ActionScript 1.0 (または 2.0) を使う設定で
Flash Player 6 以上用の SWF をパブリッシュするものと想定しています。
(例えば Flash Lite 1.1 用SWFパブリッシュ や Flash 5 使用などは想定外)

ただ思うのですが...
仮にこれだけのことをするだけであるなら
ActionScript など使わず モーショントゥイーン で普通に(ちゃんと)作れば良いだけだと思いますが。

また上記で回答したものとは全く違うものを作成されている可能性も大大大です。
その場合は悪しからず。

~#2へ続く~
 
 

投稿日時 - 2011-05-19 18:35:25

あなたにオススメの質問