dポイントプレゼントキャンペーン実施中!

flash8を使用しています。今、作成しているものは
クリックして開けた箱の中にボタンが隠れていて
そのボタンをさらにクリックすると
あるURLが表示される・・・というflashを作成したいのですが、

この箱の中のボタンに対する下記の表記では表示されません。
on (release) {
getURL("http://www.***");
}
ムービークリップ(開く箱)の中の構造は
up・over・release・outでフレームを区切っており、
箱のフタが閉じた状態から開くように設定しています。
ここまでの動作は問題なく出来ているのですが、
中に入れたボタンをクリックしても
表示したいURLが表示されないんです。

ちなみにこの箱のムービークリップに対する
メインタイムラインのスクリプトは・・・
var box:MovieClip;
box.onRollOver = openBox;
box.onRollOut = closeBox;
box.onRelease = breakBox;
box.onReleaseOutside = closeBox;

function openBox():Void
{
this.gotoAndPlay("over");
}
function closeBox():Void
{
this.gotoAndPlay("out");
}
function breakBox():Void
{
this.gotoAndPlay("release");
}

というように指示しています。
試しに、この箱のムービークリップではなく、
フレームで区切ってない単純なムービークリップの中に
ボタンを置いたらURLが表示されるので
このフレーム区切りが反応させない原因なのでしょうか?
何か解決方法はないのでしょうか?
ご教示願います。

A 回答 (1件)

「URLを表示させたい」の意味は,


「URLである http://www.** という文字列をどこかに表示させたい」
という意味ではなくて,
「URLのページにジャンプしたい」 とか 「URLのページを別窓で開きたい」 という意味だったのですね。
今回のご質問でやっと理解ができました。


ムービークリップの中にボタンを入れることではなく,
ムービークリップ自体に onRollOver や onRelease などをセットすることがマズイと思います。
ボタンはムービークリップの中にあるので,ボタンもムービークリップです。
したがって,
ボタンの on (release) よりも,ムービークリップの onRelease などの方が勝ってしまいます。

しかし,ムービークリップのボタン機能の方が勝つからこそ良いのではないでしょうか?
ボタン機能が複数重なった場合,同時に複数のものが色々実行されると普通は困りますよ。


とりあえず,

box.onRollOver = openBox;
box.onRollOut = closeBox;
box.onRelease = breakBox;
box.onReleaseOutside = closeBox;

を消して,
次のようにすると,箱の開閉も動作しますし,
ボタンの on (release) が有効にはたらくと思います↓。

-------------------------------------
// 箱の開閉状態を示すフラグを用意
var opn_flg:Boolean = false;

// マウス監視用オブジェクトの作成
var mListener:Object = new Object();

// マウスが動いた時の動作定義
mListener.onMouseMove = function()
{
// もし箱がマウスとヒットしていれば
if (box.hitTest(_root._xmouse, _root._ymouse, true))
{
// なおかつ 箱の開閉フラグが false であれば
if (!_root.opn_flg)
{
openBox();
// 即 箱の開閉フラグを true にする
_root.opn_flg = true;
}

// もし箱がマウスとヒットしていなければ
} else if (_root.opn_flg)
{
// なおかつ 箱の開閉フラグが true であれば
if (_root.opn_flg)
{
closeBox();
// 即 箱の開閉フラグを false にする
_root.opn_flg = false;
}
}
};

// マウスをアップしたときの動作定義
mListener.onMouseUp = function()
{
// もし箱がマウスとヒットしていれば
if (box.hitTest(_root._xmouse, _root._ymouse, true))
{
breakBox();
}
};

// マウスクラスのリスナーにmListenerを登録
Mouse.addListener(mListener);

// 以下はターゲットパスが変わります(this.box)
function openBox():Void
{
this.box.gotoAndPlay("over");
}

function closeBox():Void
{
this.box.gotoAndPlay("out");
}

function breakBox():Void
{
this.box.gotoAndPlay("release");
}
-------------------------------------


これでボタンの on (release) がはたらくようになると思います。

しかし,
もし箱がゆっくり開く場合,
今度は箱が開く前のボタンが見えないうちに,
ボタンのあるはずの位置をクリックしても,
on (release) がはたらいて,getURL() してしまうと思いますよ。

それで良いのであれば,上のままで良いと思います。
それでダメなのならまた工夫が必要です。
普通は on (release) などのボタン機能が同時にはたらいては不都合なのです。
だから優先順位があるのです。


上のスクリプトでダメなのならまた工夫が必要ですが,
しかし,
スクリプト的に解決するのであれば,
上のようにすることくらいがだいたい限度だと思います。
それ以上は Flash の構造自体をなんとかしなければならないでしょうでしょう。


絵が見えないので,
どういう状況なのかがわかりませんが,
さらに工夫する場合,
私であれば,ボタンの上にマスクレイヤーを用意して
ボタンにマスクをかけると思います。
そして,箱が開いてボタンが見えるのと同じように,
ボタンにかけたマスクを動かすか,マスクは固定でボタンを動かします。

絵が見えないのでなんとも言えませんし,
図画工作的なことをここで回答するのは難しいですから上手く説明はできませんが,
ボタンの on (release) などは,
マスクがかかってボタンが見えた部分のみ有効になります。

「マスクとは?」
http://www.1art.jp/flash/le/lesson9/lesson9-2.htm



あと,常に gotoAndPlay("○○") だと、
箱にマウスをあててすぐにマウスを放したら
開閉の動作がギクシャクしませんか?

何でしたら,
フレームの逆再生で,箱を開閉する手段もあります。
余裕があれば挑戦してみても良いかもしれません。

「ロールアウトで逆戻りするアニメーション」
http://www.fumiononaka.com/TechNotes/Flash/FN030 …
 
    • good
    • 0
この回答へのお礼

大変分かりやすい、ご回答ありがとうございました!
解決できました!
箱は早く開くようにしているので、問題はありませんでした。
ありがとうございました!!

お礼日時:2007/05/31 10:02

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