プロが教える店舗&オフィスのセキュリティ対策術

Flashでこのリンクの仕方はどういう仕組みになっているんですか?

参考になる本などありましたら、教えてください。
宜しくお願い致します。

A 回答 (1件)

getURL(_root.URLS[_name]);


を書いた周囲のスクリプトや周囲の状況がわからないので,
具体的なことはわかりませんが,わかる範囲で回答します。

> 参考になる本などありましたら、教えてください。

そういうピンで特殊なものは,ヘルプまたはネットが参考になります。
もしこれに関して書かれている本があったとしても,
ごく一部のページで使われるだけで,
解説などもないか,あっても2~3行の軽い説明くらいだと思います。


getURL(); はわかりますよね。
ActionScript のハイパーリンク関数です。

ご質問の場合,引数は1つで,その引数は "" で閉じられていませんから,
 getURL(変数);
ということになります。

つまり,
 getURL(変数_root.URLS[_name]に代入された値);
ということです。


次に getURL(); の引数である
 _root.URLS[_name]
ですが,
これは _root にある URLS という名前のインスタンスの [_name] というプロパティもしくは変数もしくはインスタンスという意味になりますが,
getURL(); で使われるのですからプロパティやインスタンスではないと思います。
「URLS という名前のインスタンスの中に設定された[_name] という変数」
だと推測されます。


そして最難関が
 [_name]
です。
[_name]の [] は配列アクセス演算子と呼ばれる物で,
この名前さえわかれば検索もできるのですが名前がわからなければ検索のしようもないものだと思います。

これに関しては特に次のURLが詳しく書かれています。
「ドット演算子と配列アクセス演算子」
http://www.fumiononaka.com/TechNotes/Flash/FN050 …

難しく書いてありますが,
要約すると配列アクセス演算子([ ])は配列とは直接関係ありません。
[ ] 内を1つの階層名や1つの階層内のオブジェクト名として動的に扱ってくれる便利なものなのです。
「配列アクセス演算子」で検索すると,
実例として参考になるページがたくさん検索されると思います。
実感すれば納得できるものですが,言葉で説明されてもなかなかわかりにくいものだと思います。
いろいろ探してみてください。
http://www.google.co.jp/search?hl=ja&q=%E9%85%8D …


次に _name ですが,
これはムービークリップの _name プロパティです(おそらく)。
ムービークリップの _name プロパティとはつまり,
ムービークリップのインスタンス名です。

getURL(_root.URLS[_name]);
これがどこに書かれたものかわかりませんが,
ステージ上に例えば 「my_mc1」 というインスタンス名のムービークリップを作成して,
その「my_mc1」 自体に,

on (release) {
getURL(_root.URLS[_name]);
}

と書いた場合は,

on (release) {
getURL(_root.URLS.my_mc1);
}

と同じ意味になります。



この辺くらいまでしかわかりませんね。
状況がわからな過ぎます。

URLS とは何?
そんなことはファイルを見ないとわかりません。
URLS ではなく myLV とか myLoadVars とかいうインスタンス名でしたら,
確信はできませんがおそらく LoadVarsクラス のインスタンス名であると推測はできます。
URLS ではなく url_mc とか URLMC とかいうインスタンス名でしたら,
確信はできませんがおそらくムービークリップのインスタンス名であると推測はできます。
URLS では何のインスタンス名かわかりません。
何かのインスタンス名です。



この URLS が仮にムービークリップであると仮定して,
簡単なサンプル例を書いておきます。


新規ドキュメントを作成して,
_root(メインムービーのステージ上)に,塗りの長方形を書いて,
その 塗りの長方形をムービークリップに変換します。

そのムービークリップを選択して,
下のプロパティインスペクタ(プロパティパネル)で URLS というインスタンス名を付けます。

その ムービークリップURLS を選択して,
アクションパネルを開いて次のようなコードを書きます(コピペします)。

-----------------------------------
onClipEvent(load){
my_mc1 = "a.html";
my_mc2 = "b.html";
my_mc3 = "c.html";
}
-----------------------------------

これで,ムービークリップURLS 内には,
変数 my_mc1~my_mc3 にそれぞれ
a.html~c.html という値が代入されます。

この ムービークリップURLS とは違う色の塗りの四角をステージ上に描いて
これもムービークリップに変換します。

そしてこちらには「my_mc1」というインスタンス名を付けます。
その ムービークリップmy_mc1 を選択して,
ムービークリップ自体にアクションパネルで次のようなコードを書きます。

---------------------------------
on (release) {
getURL(_root.URLS[_name]);
}
---------------------------------

この ムービークリップmy_mc1 をコピー貼り付けを2回して,
合計3つにします。

そのうち1つを選択して,
インスタンス名を 「my_mc2」 に変更します。

「my_mc2」とは別の1つを選択して,
インスタンス名を 「my_mc3」 に変更します。

これで,「my_mc1」~「my_mc3」の3つのムービークリップと,
最初に作成した 「URLS」 ができるわけですが,
これで任意の場所に FLA を保存してパブリッシュします。

すると SWF がパブリッシュされますが,
「my_mc1」をクリックすると,「a.html」にジャンプしようとするはずです。
「my_mc2」をクリックすると,「b.html」にジャンプしようとするはずです。
「my_mc3」をクリックすると,「c.html」にジャンプしようとするはずです。
「a.html」~「c.html」 を SWF やHTMLと同じフォルダに作成しておくと,
動作確認できると思います。


わかりますでしょうか?

「my_mc1」~「my_mc3」 は,コピー→貼り付けなどによってできたものですから,
全く同じスクリプト

on (release) {
getURL(_root.URLS[_name]);
}

が書いてあるはずです。
しかし実際の動作は違うわけです。
自分自身のインスタンス名によって,違うHTMLが呼びだされます。



なぜこのようなしくみにしてあるのかはよくわかりません。
手動ではなく,
MovieCrip.attachMovie() などによって動的にムービークリップボタンを作成する必要があったためこうしたのかもしれませんし,もっと他に理由があるのかもしれません。
また上でも書きましたように,
URLS とは何のインスタンスかはわかりませんが,
何にしても,
インスタンスURLS 内にある変数を参照するのに,
ムービークリップのインスタンス名を使ったということには違いないと思います。

getURL(_root.URLS[_name]);
が書いてある場所(ムービークリップ)はファイルを見ればすぐにわかると思います。
もしボタンに書いてあればそのボタンが存在するムービークリップです。

そのムービークリップのインスタンス名を確認してみてください。
URLS は何かわかりませんが,
_root のステージ上か _root に書いたスクリプトのどこかにあるはずです。
そしてその URLS 内の変数を探してみてください。
getURL(_root.URLS[_name]); を書いたムービークリップのインスタンス名と同じ変数名とその値(URL)がどこかに書いてあるはずです。
ムービー内に変数がなければ外部テキストファイルです。


getURL(_root.URLS[_name]);
を書いた周囲のスクリプトや周囲の状況がわからないので,
とにかく具体的なことはわかりません。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
細部まで親切に説明しいただけて助かりました。

仕事上で、以前働いていた方が作ったFlashのリンク切れを直さなければならなくなって、しかし、私にはそれほどの知識もなく。
たいへん参考になりました。
あとは自分なりにがんばってみます。
ありがとうございました!!!!

お礼日時:2008/03/18 00:10

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