現在Eラーニングのようなものを作っております。
HTMLからFlashVarsでswfへ変数を渡し、フレームを指定して再生したいと思っています。
具体的には、
トップページindex.htmlからリンクをはって、ch7_file.swfという
ファイルを開きます。
ch7_file.swfファイルは、39フレームあり、各フレームにstop();
を書き、nextFrame()とprevFrame()が書かれたボタンを配置
してあります。計706Kです。
そして1フレーム目には
this.gotoAndStop(fn);
delete fn;
とかいてあります。
ch7_file.swfへのリンクはトップページに2つあり、それぞれ開始
するフレームが異なります。
1つはch7_file.swfがはめこんであるch7_file.htmlへのリンクで、
1フレーム目から再生するもの。
2つ目はch7_file.swfがはめこんであるch7_file_new1.htmlへの
リンクで、7フレーム目から再生するものです。ch7_file_new1.html
ファイルには、
<param name="FlashVars" value="fn=sec3_1" />
<embed src="../flash/ch7_file_new1.swf" FlashVars="fn=sec3_1" .../>
と書きました。
2つめのリンクをクリックしても、ch7_file.swfは1フレーム目から開
始されたため、
test.text = fn;
と1フレーム目にかいてみたところ、値がテキストボックスに表示さ
れました。
そこで、似たような動きをするActionScriptとHTMLの中身が同
じswfを作ってみたところ、フレームを指定して再生することがで
きました。このswfは、7フレームあり、計4Kです。
何をどうすれば動くのか分からなくなってしまいました。
どなたか教えてください。
使用環境は:
Windows 2000
DreamWeaver MX 2004
FLASH MX 2004 version 7.2
InternetExplorer 6.0.2800.1106
Netscape 7.1
Mozilla Firefox 1.0.7
どうか宜しくお願いします。
No.2ベストアンサー
- 回答日時:
#1です。
#1 の補足を拝見しました。
_root に対する onEnterFrame = function() {}; が重なっているではないですか。
例えば,次のようなスクリプトは,
bbb++; しか実行されません。
----------------------
var aaa = 5;
var bbb = 0;
this.onEnterFrame = function() {
aaa++;
};
this.onEnterFrame = function() {
bbb++;
};
----------------------
先の aaa++; の方の onEnterFrame = function() {}; は,
後の bbb++; の onEnterFrame = function() {}; に取って変わられて,
(定義しなおされて,)
bbb++; だけになります。後勝ちです。
=====================================
ちょっと タイム... 。
話がややこしくてすみません。
都合上,少し違う話を先に書きます。
私のミスで関係のない話を書かなければいけなくなってしまったのですが,
フレーム移動しない理由とは別で,
#1 で書いたスクリプトは,1行書き忘れがあります。
----------------------
// とりあえずストップ
this.stop();
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
// swfファイルすべてが読み込まれたら
if (this.getBytesLoaded()>=this.getBytesTotal()) {
// フレームfn に
this.gotoAndStop(fn);
// そしてこの onEnterFrame を削除
delete this.onEnterFrame;
} else {
// それ以外はストップ
this.stop();
}
};
----------------------
これ↑が正解です。
// そしてこの onEnterFrame を削除
delete this.onEnterFrame;
これが抜けていました。
delete this.onEnterFrame; を書かなくても,
フレーム移動はすることはしますが,
これを書かないと,
その後もずっと,
this.gotoAndStop(fn);
が繰り返し実行されます。したがって,
> nextFrame()とprevFrame()が書かれたボタンを配置
> してあります。計706Kです。
と書かれている,nextFrame() と prevFrame() のボタンが動作しなくなります。
ですから,上のように訂正します。
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
それで,本題に "近い" 話に戻るのですが,
_root に対する onEnterFrame = function() {};
が重なっているので,
本来は1つの onEnterFrame = function() {}; 内に
> frameNo = this._currentframe;
も入れればすぐ解決するのですが,
上にも書いたように,上の onEnterFrame = function() {}; は削除しなければなりません。
したがって,
> frameNo = this._currentframe;
を同じ onEnterFrame = function() {}; 内に書けないのです。
=====================================
というわけで,
やっと,最初の本題に戻ります。
_root に 対するonEnterFrame = function() {}; が重なっているので,
私の回答した方の ロード待ちスクリプトをムービークリップに移動させます。
フレーム1 だけに存在する透明もしくは空のムービークリップを1つ作成してください。
1
□ レイヤー 筆・・・|●|○
こんな感じで,フレーム1 にだけ存在するムービークリップです。
見える必要はないので,ステージ上であれば場所はどこでもかまいません。
そして,
そのムービークリップ自体に,
------------------------------------
// このムービークリップが表示されたら
onClipEvent (load) {
// とりあえず _root をストップ
_root.stop();
}
// 1フレーム進む時間ごとに随時実行
onClipEvent (enterFrame) {
// _root がすべてが読み込まれたら
if (_root.getBytesLoaded()>=_root.getBytesTotal()) {
// _root の fn フレーム に _root の再生ヘッドを移動
_root.gotoAndStop(_root.fn);
} else {
// それ以外は_rootをストップ
_root.stop();
}
}
------------------------------------
と書けば大丈夫だと思います。
これは ムービークリップ が存在しなくなると,
実行を続けませんから,スクリプトで delete する必要はありません。
ちなみに,
FlashVars の方は大丈夫ですよね。
私の環境では,Objectタグにも
<param name=FlashVars VALUE="fn=sec3_1" />
を書かないとうまく行きませんでしたが,
この辺は大丈夫ですよね。
おそらく FlashVars の方は大丈夫だと思うので,
念のため少し書いてみただけです。
---あと,気になったこと-------------------
私は,スクリプトがどんなに長くなっても,
同じタイムライン(_root なら _root)の,同じフレーム(フレーム1 なら フレーム1)に書く場合,
レイヤーを分けません。
普通の方もだいたいそうだと思います。
1つのタイムラインでは,1つのレイヤーをスクリプト専用レイヤーにして,
そのレイヤーだけにスクリプトを書きます。
あっちこっちに書いてもややこしくなるだけだと思います。
実行されるタイミングもどっちが先かわからなくなりますし。
当然,スクリプト専用レイヤーには,
ムービークリップなどのインスタンスや,シェイプなどの絵も置かないので,
a マークの付いたフレームは必ず ○(白丸) 状態です。
タイムラインの雰囲気↓
////////////////////////////////////////////////
a a a
□ レイヤー 筆・・|○ []|○ []|○| ←Script
□ レイヤー 筆・・|●>------>|●//// []| ←その他
□ レイヤー 筆・・|○|●////[]|●-->|●[]| ← 〃
□ レイヤー 筆・・|●>------->|● []|○| ← 〃
////////////////////////////////////////////////
↑絶対にこうするべきと言う意味ではありません。
こんな感じにすることをお薦めしますということです。
sassakunさん
ありがとうございます。
とても丁寧なご説明ほんとに感謝します!
sassakunさんのご指示とおりにつくってみましたが、fnページ
から表示することはできませんでした。
が、しかし、ご説明いただいたことをふまえ、sassakunさんの
スクリプトでいろいろ試してみたところ、以下のスクリプトで
ページを飛ばすことができました!
this.stop();
this.onEnterFrame = function() {
frameNo = this._currentframe;
if (this.getBytesLoaded()>=this.getBytesTotal()) {
this.gotoAndStop(fn);
} else {
this.stop();
}
delete fn;
};
sb.contentPath = "load_menu";
var scroller = sb.content;
scroller.gotoAndPlay(1);
まさか他のスクリプトと指示がぶつかって無効になっているなど
夢にも思いませんでした!
スクリプトは1つのレイヤーにまとめました。これからはこのつくりで
進めていきます。
ほんとうにありがとうございました!
No.1
- 回答日時:
Flash Vars の問題ではなく,
その swf の フレーム1 に
this.gotoAndStop("sec3_1");
と書いても,フレーム30 にはフレーム移動しないと思います。
Flash とはそういうものです。
メモリ上にまだ読み込まれていないフレーム移動出来ません。
これでいかがでしょうか↓。
-------------------------------
// とりあえずストップ
this.stop();
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
// swfファイルすべてが読み込まれたら
if (this.getBytesLoaded()>=this.getBytesTotal()) {
// フレームfn に
this.gotoAndStop(fn);
} else {
// それ以外はストップ
this.stop();
}
};
-------------------------------
フレーム1 に書いてください。
コピペでも動作すると思います。
意味は,// の付いているコメント行に書いています。
そういうフレーム移動エラーが起こる可能性があり,
なおかつ読み込み待ち処が長くなる可能性がある場合,
「読み込み中... ...」や「Now Loading ...」というような画面を用意することもあります。
Flash でたまに見かける「Now Loading...」はそういう意味です。
上のスクリプトでは,単に フレーム1 でストップし
エラーを回避しているだけで,
「Now Loading...」 などは,当然表示されません。
ちなみに,
Flash Vars で指定している値は,フレームラベルですよね。
もし,フレームラベルではなく, フレーム数を指定している場合は,
もっと合理的,なおかつ簡素なスクリプトで行けます。
ご参考までに。
-------------------------------
// とりあえずストップ
this.stop();
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
// fnフレーム 以上が読み込まれたら
if (this._framesloaded>=fn) {
// フレームfn に
this.gotoAndStop(fn);
} else {
// それ以外はストップ
this.stop();
}
};
-------------------------------
sassakunさん
回答ありがとうございます!
早速2通り試してみましたが、どちらもフレーム移動は行われま
せんでした。
いったい何が原因なのかわかりません・・・
「Now Loading ...」は、1秒ほどでswfファイルが表示される
ため使用していません。
HPなどを見ていると、ページを表示するまでに数秒かかる
場合がありますが、現在作成しているファイルは、アップし
て他のマシン上でも確認しましたがキャッシュを削除しても
1秒ほどで表示されています。
思い当たることとして、他に記述しているスクリプトは、
・横においてあるScrollPaneの中にあるムービーを動かすための
スクリプトを1フレーム目の違うレイヤーに:
sb.contentPath = "load_menu";
var scroller = sb.content;
scroller.gotoAndPlay(1);
・ページ数を表示するスクリプトを1フレーム目の違うレイヤーに:
this.onEnterFrame = function(){
frameNo = this._currentframe;
// totalframe = this._totalframes;
};
のみです。
ムービーは多数使用していますが全フレームにあるわけではなく、
今回表示させたい7ページ目にはムービーはありません。
ムービーは、loadMovieは使用せず、各フレーム内のレイヤーに
直接配置してしまっています。
つくりの問題かも、と思ってしまっています・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- 物理学 磁性体に関する熱力学の問題が分かりません 1 2023/07/18 03:23
- Visual Basic(VBA) フレーム内のオプションボタンの選択結果をセルに書き出したい。 図のような預金種目というフレームにオプ 2 2022/07/29 11:12
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲオでカードを作るのは何歳か...
-
フラッシュゲームアーカイブ2
-
レジリエンス 変換キーが作動し...
-
この曲はなんでしょう?
-
arduino プログラムについて
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
-
Windows10重い
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
Adobe(マクロメディア)のFLAS...
-
ヘッダーデザインをするさい形...
-
更新されて起きた問題
-
googlechromeでadobeflashplayer
-
Flash playerを有効にするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
Flashでのゲーム用アナログ時計...
-
ムービーの早送りと巻き戻しが...
-
ボタンで移動する前に、特定のM...
-
Error#1009 時計のシーン移動ボ...
-
Flash Professional CS5
-
ループ再生のflashをタイムライ...
-
画像がランダムに表示されるFLA...
-
ActionScriptの基本的な部分で...
-
キーボードを押した時のムービ...
-
【ActionScript】命令文を再実...
-
FLASH lite1.1での質問というか...
-
画像をランダムに表示させたい
-
深い階層でのムービークリップ...
-
Flash lite1.0の計算クイズ
-
プルダウンメニューとフェード...
-
loadMovieで読み込んだswf
-
外部画像を読み込み、ボタンで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
おすすめ情報