
下記のようなスクリプトを記したインスタンスをステージに配置し、stop();で止めてあるMC1を同じくステージに配置。
on (release) {
_root.MC1.play();
}
このままだと問題なく動いてくれるのですが、このswfファイルを別のswf(load.swf)から読み込むとうまく動いてくれません。
なんとなく_rootのあたりに問題があるのかな?と思うのですが、いまいちどう対処してよいものかわかりません。
解決する方法や代案をご存知の方がおられましたら、どうかご教示をよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
>なんとなく_rootのあたりに問題があるのかな?と思うのですが
たぶんそうでしょうね。
ロードされる swf が 別のswf(load.swf) にロードされたとき,
_root が その別のswf(load.swf)の _root を指すようになるために動かなくなったのだと思います。
> 下記のようなスクリプトを記したインスタンスをステージに配置し
_root
├ スクリプトを記したインスタンス
└ MC1
ということでしょうか?
もしそうであって,
スクリプトを記したインスタンスがボタンインスタンスであれば,
on (release) {
this.MC1.play();
}
もしくは this を省略して
on (release) {
MC1.play();
}
スクリプトを記したインスタンスがムービークリップインスタンスであれば,
on (release) {
this._parent.MC1.play();
}
もしくは this を省略して
on (release) {
this._parent.MC1.play();
}
と書けば大丈夫だと思います。
このように全て相対パスで書くのが一般的な対処法です。
「ターゲットパス」
http://homepage3.nifty.com/ginga-b/MX/targetpath …
また,
Flashのアクションパネルの上側(スクリプトを書く部分のすぐ上の鴨居の部分)には,
○ に + を組み合わせた形のアイコン(田←これのフチが丸いボタン)があると思いますが,
それが「ターゲットパスの挿入」ボタンです。
on (release) {
play();
}
ここまで書いておいて,
play の前側にカーソルを置いて,
on (release) {
|play();
}
「ターゲットパスの挿入」ボタンを押すと,色々なインスタンスが出てくると思いますから,
「相対パス」にチェックを入れて MC1 を選択すると,自動的に,
on (release) {
this.MC1.play();
}
などと記入されると思います。
いつもこのターゲットパスの挿入ボタンが使えるわけではありませんが,
このボタンを使えた場合,使うのも1つの方法です。
======================
なお,
Flash MX 2004 (FlashPlayer7)以降は,
ムービークリップに _lockroot プロパティが追加されました。
Google検索「_lockroot」
http://www.google.co.jp/search?hl=ja&q=_lockroot …
FlashPlayer7 以降用の SWF をパブリッシュする場合は,
ロードされるSWFの_rootのフレーム1の最初などに,
this._lockroot = true;.
と書いておくと,
その SWF が他の SWF からロードされたときも,
別のswf(load.swf) に _root が移動せずにその SWF 内でロックされるので,
on (release) {
_root.MC1.play();
}
のままでも大丈夫になります。
おかげさまでthis._parent.を2行目の頭に加えることで動くようになりました。助かりました。
詳しく教えていただいてとても勉強になりました。
実際は下記のようにクリックした際に音を鳴らすようになっているのですが、音が鳴らないようになりました。
教えて頂いたthis._lockroot = true;を使用してみたりse001の手前に_parent.を付け加えてみたりしたのですが、やっぱり鳴らない。
ライブラリにある音は相対パスのような感じで指定できますでしょうか?
あつかましいのですがよろしければどうかよろしくお願いいたします。
on (release) {
this._parent.MC1.play();
var se01:Sound = new Sound();
se01.attachSound("click");
se01.start();
//ライブラリ内のclick.mp3のリンゲージをclickに指定済み
}
No.3
- 回答日時:
#2です。
ぜんぜん 変更 になっていませんでした。
#2 で書きたかったのは,
---------------------------------
> var se01:Sound = new Sound();
↓変更↓
var se01:Sound = new Sound(this);
でうまく行くのではないかと思いますが。
---------------------------------
です。
おおおおお!できました!
度重なる返信を頂き本当にありがとうございました。
四苦八苦していたため助かりました。
改めてありがとうございました。
No.2
- 回答日時:
#1です。
> 実際は下記のようにクリックした際に音を鳴らすようになっているのですが、
> 音が鳴らないようになりました。
その現象は聞いたことがあります。
結局リンケージで共有する部分が難しいのです。
ロード元(親)SWF に ロード先(子)SWF のムービークリップを,
attachMovie できないとか,その辺のことと絡んでいます。
> var se01:Sound = new Sound();
↓変更↓
var se01:Sound = new Sound();
でうまく行くのではないかと思いますが。
「FN0402003 - Sound.attachSound()メソッド - Flash テクニカルノート」
http://www.fumiononaka.com/TechNotes/Flash/FN040 …
> [*2] サウンドにリンケージを設定した外部SWFムービーを
> MovieClip.loadMovie()メソッドで読込む場合には、
> Soundオブジェクトを作成する際(コンストラクタnew Sound())の
> 引数として、外部SWFをロードするターゲットのMovieClipインスタンスが
> 渡されなければなりません。
> // フレームアクション
> my_sound = new Sound(this);
> my_sound.attachSound("mySound");
> my_sound.start();
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「Me」を「Form1」にするとエラ...
-
【VB.NET】別Formのボタンが押...
-
全てのテキストボックスをセル...
-
テキストボックスにセルの値を...
-
当たり判定で一度だけ音をなら...
-
変数に256文字以上のテキストを...
-
テキストをクリックした時に表...
-
アセンブリ言語のcasl2について...
-
photoshopで書いた四角の枠の中...
-
合致するシンボル情報は見つか...
-
DelphiのRichEditでカーソル位...
-
Flashでムービークリップ...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
else if文の順序を変えることに...
-
【Flash】マスクでスポットライ...
-
フォームのテキストの入力数字...
-
VBAユーザーホームテキストボッ...
-
Excel VBA によるマウス操作
-
テキストフィールドにスクロー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CreateDialogについて
-
flash MXのスクロールパネルに...
-
3つ以上のインスタンスの移動
-
ペンによる手書きの様に
-
VB6.0で、フォームから、別のフ...
-
CREATESTRUCT と GetWindowLong
-
_widthから数値を導き出したい
-
シューティングゲームの自機の...
-
前の質問が消えてしまいました
-
【ActionScript】コンボボック...
-
【VB.NET】別Formのボタンが押...
-
レイヤー内のすべてのMCのX...
-
C#で、コントロールの受け渡し...
-
フォームの生成と破棄
-
画像を一定時間ごとに切り替え...
-
ムービークリップ内に配置した...
-
外部swfが表示されません
-
Androidで共通のレイアウトを使...
-
Flash ActionScriptで変形点を...
-
チェックボックスの制御(onCli...
おすすめ情報