トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ムービークリップの中に入ったボタンを作動させる方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
cyancyan
Åê¹ÆNo.32491
投稿日時: 2007-3-15 8:17
新米
居住地: アメリカ
投稿: 9
使用環境:
MacOS 10.3.9,Flash MX2004(ENG)
ムービークリップの中に入ったボタンを作動させる方法
初めまして。
約5年ぶりにフラッシュをやり始めたのですがさっぱりわからなくなったので、皆様のお知恵をお借りしたいと思います。

現在2800X2800の大きな背景をボタンを押すと指定された座標軸へ移動するサイトを作っています。そこで、参考にしたスクリプトだとボタンはただのボタンシンボルなので、自分でも簡単にできたのですが、次にボタンに動きをつけたとたんに動かなくなりました。多分、新しいボタンがムービークリップに入っていたので、そのムービークリップのインスタンスも入れなくてはいけなかったような気がするのですが、なにぶん久しぶりなのですっかり忘れてしまいました。

ちなみに参考にしたスクリプトは
this.stop();
nSpeed = 5;
targetX_array = new Array();
targetX_array = [0, -800, 0, -800];
targetY_array = new Array();
targetY_array = [0, 0, -600, -600];
nTargetX = 0;

function xMove() {
var nDestX = nTargetX-this._x;
var nDestY = nTargetY-this._y;
if (Math.abs(nDestX)<0.3 && Math.abs(nDestY)<0.3) {
this._x = nTargetX;
this._y = nTargetY;
delete cont_mc.onEnterFrame;
} else {
this._x += nDestX/nSpeed;
this._y += nDestY/nSpeed;
}
}
function xSetMove(nNewTarget) {
nTargetX = targetX_array[nNewTarget];
nTargetY = targetY_array[nNewTarget];
cont_mc.onEnterFrame = xMove;
}
btn1.onRelease = function() {
xSetMove(0);
};
btn2.onRelease = function() {
xSetMove(1);
};
btn3.onRelease = function() {
xSetMove(2);
};
btn4.onRelease = function() {
xSetMove(3);
};

以上です。ここで、cont_mcというのは大きな背景が入っているムービークリップでbtn1, btn2, btn3, btn4はボタンのインスタンス名です。
ちなみにこれらのボタンはただのボタンのみです。

新しく作ったボタンはプルダウン式のボタンで、ボタンはpulldown_movieというムービークリップに入っており、そのムービークリップはcontentsというムービークリップに入っております。ちなみに、このcontentsというムービークリップは背景のムービークリップの上のレイヤーにおいてます。

何やら長くなってしまいましたがどなたかお分かりの方、お知恵をお貸しください。
よろしくお願いします。
野中文雄
Åê¹ÆNo.32494
投稿日時: 2007-3-15 11:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービークリップの中に入ったボタンを作動させる方法
引用されたスクリプトは、私の環境では、とくに問題なく動作しているように見えます。
引用:
cyancyanさんは書きました:
ちなみに参考にしたスクリプトは
this.stop();
nSpeed = 5;
targetX_array = new Array();
targetX_array = [0, -800, 0, -800];
targetY_array = new Array();
targetY_array = [0, 0, -600, -600];
nTargetX = 0;

function xMove() {
	var nDestX = nTargetX-this._x;
	var nDestY = nTargetY-this._y;
	if (Math.abs(nDestX)<0.3 && Math.abs(nDestY)<0.3) {
		this._x = nTargetX;
		this._y = nTargetY;
		delete cont_mc.onEnterFrame;
	} else {
		this._x += nDestX/nSpeed;
		this._y += nDestY/nSpeed;
	}
}
function xSetMove(nNewTarget) {
	nTargetX = targetX_array[nNewTarget];
	nTargetY = targetY_array[nNewTarget];
	cont_mc.onEnterFrame = xMove;
}
btn1.onRelease = function() {
	xSetMove(0);
};
// ...[後略]...

以上です。ここで、cont_mcというのは大きな背景が入っているムービークリップでbtn1, btn2, btn3, btn4はボタンのインスタンス名です。
ちなみにこれらのボタンはただのボタンのみです。

上記スクリプトには、pulldown_movieもcontentsも登場せず、またその構造を反映した記述にはなっていないように思われます。動作しないのは、上記スクリプトを以下の構造に対応して書替えた結果なのではありませんか?

健康な状態のレントゲン写真を見せて、今どこが悪いのか尋ねても、答えられる医者はいません。

まず、問題を切分けて、明確にすることが先決です。
引用:
新しく作ったボタンはプルダウン式のボタンで、ボタンはpulldown_movieというムービークリップに入っており、そのムービークリップはcontentsというムービークリップに入っております。ちなみに、このcontentsというムービークリップは背景のムービークリップの上のレイヤーにおいてます。


----------------
 

cyancyan
Åê¹ÆNo.32499
投稿日時: 2007-3-16 3:10
新米
居住地: アメリカ
投稿: 9
使用環境:
MacOS 10.3.9,Flash MX2004(ENG)
Re: ムービークリップの中に入ったボタンを作動させる方法
早速のお返事ありがとうございます。
はい。スクリプトの方はムービークリップのないボタンだと作動しました、しかし、pulldown_movie とcontentsの中にボタンを入れたとたん作動しなくなりました。多分、ハイロキー(階層?)をきちんと表記しなかったがために動かなかったと思い、自分で

contents.pulldown_movie.btn1.onRelease

と入れたのですが、それでも作動しませんでした。
やはりこの表示がいけなかったのでしょうか?

野中文雄
Åê¹ÆNo.32500
投稿日時: 2007-3-16 3:29
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービークリップの中に入ったボタンを作動させる方法
問題を切分け」る努力はされましたか? また、第三者から見てわかるように説明しましょう。

たとえば、以下のスクリプトが、どこに記述されたものなのかがわかりません。それに、他に影響する要因(スクリプトや加えている操作など)がないのかも不明です。

「pulldown_movie とcontents」および「btn1」以外のすべてのステージ上のエレメントは削除してください。また、以下のスクリプト(とそこに設定したfunction())以外も、すべて消します。そのうえで、trace()ステートメントの結果は、どのような表示になりますか?
引用:
cyancyanさんは書きました:
はい。スクリプトの方はムービークリップのないボタンだと作動しました、しかし、pulldown_movie とcontentsの中にボタンを入れたとたん作動しなくなりました。多分、ハイロキー(階層?)をきちんと表記しなかったがために動かなかったと思い、自分で
trace(contents.pulldown_movie.btn1);
contents.pulldown_movie.btn1.onRelease = function() {
	trace(this);
}

と入れたのですが、それでも作動しませんでした。


----------------
 

cyancyan
Åê¹ÆNo.32501
投稿日時: 2007-3-16 6:52
新米
居住地: アメリカ
投稿: 9
使用環境:
MacOS 10.3.9,Flash MX2004(ENG)
Re: ムービークリップの中に入ったボタンを作動させる方法
わかりづらくて本当にすいません。
自分でもよくわかっていないのに、ほかの方に理解してもらう方が無理ですよね。すいません。

まず、先ほどの投稿に書いたものは、スクリプトの最後の部分にcontents.pulldown.というのを各ボタンの前に追加しました。以下がコードです。
ちなみにpurlldown_movieは名前が長かったので、pulldownのみにしました。これでは動きませんでした。

contents.pulldown.btn1.onRelease = function() {
xSetMove(0);
};
contents.pulldown.btn2.onRelease = function() {
xSetMove(1);
};
contents.pulldown.btn3.onRelease = function() {
xSetMove(2);
};
contents.pulldown.btn4.onRelease = function() {
xSetMove(3);
};

まだわかりずらかったでしょうか?
いまから、traceやってみます。

本当に何度もありがとうございます。
野中文雄
Åê¹ÆNo.32502
投稿日時: 2007-3-16 8:53
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービークリップの中に入ったボタンを作動させる方法
スクリプトの「記述場所」は、きわめて重要な情報です。記述場所を明記せずにスクリプトの内容だけ知らせるのは、119番(アメリカでは911?)で「の家が火事です!!」と通報するのに等しいです。→【第三者から見てわからない】【回答をきちんと読まない・回答者から聞かれたことに答えない

参考: Flash ActionScript Helper「アクションのタイプ」「ターゲットパス
引用:
野中文雄は書きました:
たとえば、以下のスクリプトが、どこに記述されたものなのかがわかりません。それに、他に影響する要因(スクリプトや加えている操作など)がないのかも不明です。

引用:
cyancyanさんは書きました:
まず、先ほどの投稿に書いたものは、スクリプトの最後の部分にcontents.pulldown.というのを各ボタンの前に追加しました。以下がコードです。

trace()の出力を確認したうえで、今度こそスクリプトの記述場所を明記して、結果をお知らせください。
引用:
いまから、traceやってみます。


----------------
 

cyancyan
Åê¹ÆNo.32503
投稿日時: 2007-3-16 11:29
新米
居住地: アメリカ
投稿: 9
使用環境:
MacOS 10.3.9,Flash MX2004(ENG)
Re: ムービークリップの中に入ったボタンを作動させる方法
はい911です。こちらはこの番号で、救急車、消防車、警察が一気に駆けつけます。

trace の結果ですが”undefined"とういうことでした。認識されていないという事ですね。
はじめの投稿でのせたスクリプトはフレームアクションです。メインのステージの一番上のレイヤーのフレーム1にのせています。その下のレイヤーにはボタンが入れ子になっている、ムービークリップ(contents)、そして一番下には背景の画像がいはったムービークリップ(cont_mc)があります。

先ほどはこのフレームアクションのコードを少しいじりました。
this.stop();
nSpeed = 5;
targetX_array = new Array();
targetX_array = [0, -400, 0, -400];
targetY_array = new Array();
targetY_array = [30, 30, -100, -100];
nTargetX = 0;
function xMove() {
var nDestX = nTargetX-this._x;
var nDestY = nTargetY-this._y;
if (Math.abs(nDestX)<0.3 && Math.abs(nDestY)<0.3) {
this._x = nTargetX;
this._y = nTargetY;
delete cont_mc.onEnterFrame;
} else {
this._x += nDestX/nSpeed;
this._y += nDestY/nSpeed;
}
}
function xSetMove(nNewTarget) {
nTargetX = targetX_array[nNewTarget];
nTargetY = targetY_array[nNewTarget];
cont_mc.onEnterFrame = xMove;
}

//ここから各btn1のまえに、_root.contents.pulldown. をつけました。
_root.contents.pulldown.btn1.onRelease = function() {
xSetMove(0);
};
_root.contents.pulldown.btn2.onRelease = function() {
xSetMove(1);
};
_root.contents.pulldown.btn3.onRelease = function() {
xSetMove(2);
};
_root.contents.pulldown.btn4.onRelease = function() {
xSetMove(3);
};

以上の部分でしか変更はしていません。

あとプルダウンボタンのアクションスクリプトはcontentsのムービークリップのオブジェクトアクションで。スクリプトはこのようになっております。

onClipEvent (enterFrame) {
if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
this.gotoAndStop("start");
}
else {
this.gotoAndStop("stop");
}}

まだ隣が火事だと騒いでますか
Tonpoo (gaienboy改め)
Åê¹ÆNo.32504
投稿日時: 2007-3-16 11:44
職人
居住地: 東京・神宮前
投稿: 717
使用環境:
Windows 7 Professional,
Flash CS5 Pro,
Flash Player 10,1,102,64
Re: ムービークリップの中に入ったボタンを作動させる方法
こんにちは、gaienboyといいます。ちょっと下記のようにして
どうなるか試してみてもらえますか?


trace("=====");
trace(typeof(_root.contents));
trace(typeof(_root.contents.pulldown));
trace(typeof(_root.contents.pulldown.btn1));
trace(typeof(_root.contents.pulldown.btn2));
trace(typeof(_root.contents.pulldown.btn3));
trace(typeof(_root.contents.pulldown.btn4));
trace("=====");

_root.contents.pulldown.btn1.onRelease = function() {
    xSetMove(0);
};
_root.contents.pulldown.btn2.onRelease = function() {
    xSetMove(1);
};
_root.contents.pulldown.btn3.onRelease = function() {
    xSetMove(2);
};
_root.contents.pulldown.btn4.onRelease = function() {
    xSetMove(3);
};


----------------
Tonpoo (a.k.a. gaienboy)
Tonpoo.com / TONPOOBLOG / twitter@tonpootwit

野中文雄
Åê¹ÆNo.32505
投稿日時: 2007-3-16 12:04
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ムービークリップの中に入ったボタンを作動させる方法
メインタイムライン(_root)の第1フレームアクションということですね。
undefinedとは、ターゲットパスが間違っていることを意味します。
引用:
cyancyanさんは書きました:
trace の結果ですが”undefined"とういうことでした。認識されていないという事ですね。

先の回答で引用した参考URLは、ご覧になりましたか?もう1度繰返します(ただし、pulldown_movieはpulldownに変更)。

具体的な処理は、後回しです。ターゲットパスが解決されないことには、先に進めません。コンパスをもたず、地図だけを片手に雪山に登るようなものです。間違いなく、遭難します。
引用:
野中文雄は書きました:
「pulldown_movie とcontents」および「btn1」以外のすべてのステージ上のエレメントは削除してください。また、以下のスクリプト(とそこに設定したfunction())以外も、すべて消します。そのうえで、trace()ステートメントの結果は、どのような表示になりますか?

また、メインタイムラインを含め、すべてのMovieClipシンボルは1フレームのみにして、それ以外のフレームは削除してください(btn1などが、配置されたタイムラインの第1フレーム以降に存在するのであれば、第1フレームに移設します)。
trace(_root.contents.pulldown.btn1);
_root.contents.pulldown.btn1.onRelease = function() {
	trace(this);
	// xSetMove(0);
};


----------------
 

cyancyan
Åê¹ÆNo.32506
投稿日時: 2007-3-16 12:52
新米
居住地: アメリカ
投稿: 9
使用環境:
MacOS 10.3.9,Flash MX2004(ENG)
Re: ムービークリップの中に入ったボタンを作動させる方法
レスありがとうございます。
結果は以下のようになりました。

=====
movieclip
undefined
undefined
undefined
undefined
undefined
=====
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops