No.1ベストアンサー
- 回答日時:
動きのみを簡単に言うと,
複数チェック不可のチェックボックスを用意して,
チェックが入っている画像のみを表示させるというようなことですね。
動きはチェクボックスに近いけど,
見かけはチェックボックスではなくボタンであるということでしょう。
方法としては,
スクリプトだけでは解決しませんから,
ボタンをムービークリップで自作して,
そういうしくみ全体を自分でつくることでしょう。
まず,
ボタン用のムービークリップを作成します。
ムービークリップ内のタイムラインは,1レイヤー,3フレーム必要です。
□ レイヤー 筆・・|●|●|●|
フレーム1 に普通に見えている状態のボタンの絵を用意します。
フレーム2 にロールオーバー状態のボタンの絵を用意します。
フレーム3 に押された状態のボタンの絵を用意します。
これが1つのムービークリップ内の作成で,
仮にボタンが5つ必要であれば,これを5つ作るわけです。
同じ図柄のボタンが5つ必要な場合は,
1つのムービークリップを作成して,それをコピペで5つに増やしてもかまいません。
そして,
各ボタン用ムービークリップにインスタンス名を付けます。
「アルファベット文字列+連番数字」という形のインスタンス名が良いです。
ここではボタンを5つ用意して,
「btnMC0」,「btnMC1」,「btnMC2」,「btnMC3」,「btnMC4」というインスタンス名を付けたとしておきます。
それで,
5つの各ムービークリップに次のようなスクリプトを書けば(コピペすれば),ほとんどできあがりです。
------------------------------------
// このムービークリップが表示されたとき
onClipEvent (load) {
// とりあえずストップ
this.stop();
// 変数 flag の値を 0 に設定
var flag = 0;
}
//
// ロールオーバー時
on (rollOver) {
// もし変数 flag の値が 0 であれば
if (flag == 0) {
// フレーム2 でストップ
this.gotoAndStop(2);
}
}
//
// プレス時
on (press) {
// フレーム3 でストップ
this.gotoAndStop(3);
}
// ロールアウト時
on (releaseOutside, rollOut) {
// もし変数 flag の値が 0 であれば
if (flag == 0) {
// フレーム1 でストップ
this.gotoAndStop(1);
}
}
//
// マウスアップ時(クリック時)
on (release) {
// btnMC0 ~ btnMC4 に対してまとめて命令
for (i=0; i<=4; i++) {
// それらの flag を 0 にする
_root["btnMC"+i].flag = 0;
// そして 各ムービークリップを フレーム1 でストップ
_root["btnMC"+i].gotoAndStop(1);
}
// このムービークリップの flag だけは 1 にする
this.flag = 1;
// フレーム3 でストップ
this.gotoAndStop(3);
//
// ===================================
// ★ ここにある画像を表示させるスクリプトを書く ★
// ===================================
}
------------------------------------
簡単なサンプルでも作ってみて,
じっくり考えれば,なぜ上のようなスクリプトになるのかがわかると思います。
ムービークリップは,
ボタンインスタンスのように,マウスの動きによって,
勝手にオーバーフレームやダウンフレームには行かないので,
自分でそれらのフレームに行かせるようなスクリプトを考えなければなりません。
しかし,
勝手にマウスの動きによって,オーバーフレームやダウンフレームには行かないので,
逆にボタンではできない自分オリジナルの動きが可能になります。
最近の Flash を使ったサイトでは,
このムービークリップで自作するボタンがかなり多くなってきていると思います。
上記の,
// ===================================
// ★ ここにある画像を表示させるスクリプトを書く ★
// ===================================
この部分は,
ボタンによって 画像を表示させるスクリプト を変えてください。
それ以外は全く同じで行けると思います。
ただし,
ムービークリップはボタンインスタンスと違って,
1つの階層を持ちますから,相対パスを使う場合ターゲットパスが変わります。
画像を表示させるスクリプトをどうしていらっしゃるのかわかりませんが,
例えば,画像を表示させるスクリプトが,loadMovie であって,
_root(メインムービー)に置いてある「myMC」に外部JPEGを表示させるスクリプトとして,
_root にあるボタンインスタンスに次のようにしていたとします。
----------------------------
on (release) {
myMC.loadMovie("aaa.jpg");
}
----------------------------
ボタンインスタンスには階層がありませんから,
上記で,ボタンと同じ階層にある myMC に aaa.jpg がロードできます。
しかし,
ムービークリップは1つの階層を持つため上のように書くと,
ムービークリップ内の myMC にJPEGをロードしようとします。
でも,
ムービークリップ内には myMC は存在しないので,結果何も表示されません。
もし _root にある myMC に aaa.jpg をロードさせたい場合は,
絶対パスで,
_root.myMC.loadMovie("aaa.jpg");
と書いてください。
また,相対パスを使う場合は,
自分の親である _root にある myMC に aaa.jpg をロードするのですから,
this._parent.myMC.loadMovie("aaa.jpg");
のようになります。
実際には loadMovie なのか何なのかはよくわかりませんが,
何であっても同様に ターゲットパス には注意してください。
絶対パスで書かれている場合は,
ボタンもムービークリップも同じですから,普通はそのままで大丈夫だと思います。
この回答への補足
分かりやすい回答有難うございました!
sassakunさんの教えていただいた通りに作成したら出来ました!
が、この出来上がったswfを、さらに他のswfに組み込む(loadMovieで)と
正しく表示されないのは何故でしょうか?
組み込んじゃダメなんですかね??
始めに表示される画面は問題ないのですが、
あるボタンを選択して、他のボタンが選択されても
(3フレーム目)のまま解除(1フレーム目に戻らない)
されないんです。
表示させたい画面は問題なく表示されてはいるんですけど。
もう少し、お力をお貸し下さい、お願いします。
No.2
- 回答日時:
#1です。
> 他のswfに組み込む(loadMovieで)と
> 正しく表示されないのは何故でしょうか?
_root が変わるからです。
#1の状態,つまり,単独のSWFの場合,
_root はそのSWFのメインムービーのタイムラインを指しますが,
他 SWF に読み込まれた場合,
その SWF のメインムービーのタイムラインが _root になるからです。
対処法は2つあります。
1つは,
_root をその SWF 内に固定する(ロックする)スクリプトを使います,
#1で作成したムービーのフレーム1の最初の行に,
------------------------------------
// _root の階層を この階層にロックする
this._lockroot = true;
------------------------------------
と書いてください。
これで解決すると思います。
ただし,
Flash Player 7 以上にパブリッシュする必要があります。
もう1つは,
#1のスクリプトの _root という文字列をすべて,
_parent に置換してください。
おそらくこの方法でもうまく行くのではないかと思います。
上に書いた,
this._lockroot = true;
を使う方が簡単で無難にうまく行くとは思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- JavaScript jsで診断コンテンツのページ内切り替えについて 1 2023/04/14 17:31
- 画像編集・動画編集・音楽編集 CyberLinkPowerDirectorでDVD作成時タイトル/チャプターのボタンが押せない 1 2023/04/09 12:30
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- その他(ブラウザ) Mycrosoft Edge の「コレクション」に、画像とテキストを追加したい 2 2022/05/28 11:10
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- マウス・キーボード ロジクールGHUBのインストール~初期設定 1 2023/04/23 21:36
- Android(アンドロイド) Y!map のスマホでの使用方法について 1 2023/08/07 09:12
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino プログラムについて
-
別のアプリケーションのテキス...
-
python ボタンを押すと複数の関...
-
photoshopで書いた四角の枠の中...
-
VBAで改行の入ったデータの正規...
-
UWSCのBTN関数について。
-
YOASOBI
-
テキストボックスにセルの値を...
-
PYTHONのtkinterについて
-
四乗根を英語で言うと・・・
-
アセンブリ言語のcasl2について...
-
改行含むテキストの表示の仕方
-
マウス自体の移動量の取得
-
シンボル化解除の方法
-
else if文の順序を変えることに...
-
時計の:を点滅させたい
-
static関数がmapファイルに載ら...
-
マスクをとるとオーバーフロー...
-
Python でシャットダウンのコマ...
-
VB6.0で、フォームから、別のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
arduino プログラムについて
-
×ボタンを無効化したいのですが...
-
ボタンの上にカーソルを置いた...
-
flashでボタンを押したら違うサ...
-
FLASHで印刷ができません
-
ボタンをクリックするとフェー...
-
クリック押下中にキーボードを...
-
ボタンインスタンスにスクリプ...
-
MCの中のActionScript
-
ボタンの重ね順について
-
swapDepths について
-
FLASH ボタンフォーカスインし...
-
メニューボタンを押されたまま...
-
外部SWF読み込み後の座標指定
-
FLASHでドロップダウンメニュー...
-
FLASHで画面の最大化と100%表示...
-
flash 計算機について
-
虫眼鏡拡大ムービーの中にボタ...
-
attachMovie後のプロパティ参照
-
photoshopで書いた四角の枠の中...
おすすめ情報