質問: movable typeにflashを配置する為のスクリプトは? movable type 内に配置したflashについての質問です。 外部ファイルのライブラリーのアセットを、リンケージで読み込むタイプのswfファイルをmovable type 内に配置しました。 ところがベースになっているのswf画像は見えるのに、外部sharedライブラリーからリンケージでリンクしているムービークリップ、グラフィック、ボタンが一切読み込まれません。 普通のウェブサイト上では問題なく動いていたswfファイルなのですが、movable type 用に何か書き込まなければいけないスクリプト等があるのでしょうか。リンケージとmovable typeの相性が悪いのでしょうか。 どなたか解決策をご存知でしたら、是非よろしくお願い致します。
回答: #1です。 > それ以外の階層ですと、絶対パスで指定しても > 外部ファイルは読み込まれませんでした。 > なぜなんでしょうね。 なぜなんでしょうねと言うか..., その下になぜか html のタグを書かれていらっしゃいますが, 一応 #1 で書いたことは理解できましたでしょうか? movable type のタグなどに付いては一切触れていません。 私が#1で書いたのは html のタグのurlのことではなく, 共有オブジェクトを呼び出す方のflashの, リンケージプロパティの, 「□ ランタイム共有用に読み込み」 のurlのことです。 #1で私が書いたことをもっと具体的に書きますよ。 外部ファイル の ライブラリ アセット の利用は, 一種の loadmovie みたいなものです。 swf に 外部swf を swfごとロードするのが loadmovie, swfに 外部swf の ライブラリ中のシンボルをロードするのが ライブラリ アセット の読み込みです。 実際には loadmovie でのオブジェクトの扱われ方と, ライブラリ アセット の読み込みオブジェクトとは扱われ方が違う部分がありますから, 決して loadmovie と ライブラリアセットの読み込み は同じではありません。 しかし, 大括りで言うと,外部 swf をロードするので同じようなものです。 その外部 swf をロードするときのファイルパスが, 読み込む側の swf からのパスではなく, 読み込む側の swf を貼り付けた html からのパスになります。 例えばファイルの階層構造が次のようになっていたとします。 任意のフォルダ ├ main.html (aaa.swf を貼り付ける) └ flash (フォルダ) ├ aaa.swf (bbb.swfのアセットをロード) └ bbb.swf (アセットを提供するソースswf) 「aaa.swf」から「bbb.swf」のアセットを使用するとします。 「aaa.swf」=ターゲット,「bbb.swf」=ソース ということです。 その 「aaa.swf」 は1つ上の階層の 「main.html」 に表示されるものとします。 この場合, 「aaa.swf」のライブラリのシンボルのリンケージプロパティから ランタイム共有用に読み込むurlは, [ bbb.swf ] ではなく [ flash/bbb.swf ] になります。 swfからのパスではなく,それを表示させているhtmlからのパスになるからです。 しかし,これ↑は一般的なサイトだから言えることです。 movable type の場合は一般的なサイトと違って, あちこちに同じようなページができます。 ですから, [ flash/bbb.swf ] のように相対パスを定めることができません。 しかたがないので, [ http:// ~~/○○/flash/bbb.swf ] のような絶対パスを指定する必要があります。 (絶対パスにするとアップしない限り動作検証ができないことが難点ですが。) ということを #1 で書いたのです。 ======================== > ほとんど問題なく読み込まれてるのですが、 > 幾つかのリンケージされたボタンがなぜか機能してません これは,上のこととは 全く別件 ですね。 問題は切り分けて考えてください。 この件は大きく分けて2つの質問内容にとることができます。 1 アセットを提供する側のボタンに設定したスクリプトが動作しない 2 アセットを読み込む側のボタンに設定したスクリプトが動作しない 1 アセットを提供する側のボタンに設定したスクリプトが動作しない これは当然です。 on (release) { gotoandplay(2); } や, そのボタン.onrelease = function(){ gotoandplay(2); }; これらは, "インスタンス" に対して直接書いたり, "インスタンス" に対しフレームなどで定義するものです。 "シンボル" に対しては直接書いたり,フレームなどで定義することはできません。 ライブラリの "シンボル" を共有するのが ライブラリ アセット ですから, アセットを提供する側のボタンに設定したスクリプトが動作しないのは当然です。 2 アセットを読み込む側のボタンに設定したスクリプトが動作しない 実際にやってみましたが, アセットを読み込む側のボタンに on (release) { gotoandplay(2); } などを書いてみても動作しませんね。 こういう階層にかかわるものでなく,もっと単純に, trace("あああ"); でも動作しません。 ボタンの共有はしたことがなかったので初めて気づきました。 ムービークリップの共有であれば, on (release) { ○○ } は動作します。 原因などはわかりません。 しかし,ボタンにインスタンス名を付けて, そのボタン.onrelease = function(){ gotoandplay(2); }; などは動作しましたよ。 このようにボタンに対して何かの動作を定義すればうまく行くと思います。