No.2ベストアンサー
- 回答日時:
#1です。
普段はカーソルとともに移動していて、ボタンにカーソルが重なった時に指定の位置に移動する・・・といったもので、よろしいでしょうか?
まず、ムービークリップの移動に関しては、enterFrame イベントを利用して、ムービークリップの座標を常にカーソルの座標に合わせる、といった方法でいかがでしょうか。マウスが動いた時に発生する mouseMove イベントでもいいと思います。
ボタンにカーソルが重なった時の処理は、#1と同様にボタンの rollOver イベントでできます。
ただし、特に enterFrame イベントでムービークリップを移動させている時は、rollOver イベントが発生して指定の位置に移動しても、その次の瞬間に、カーソルの位置に戻ってきてしまうことになります。mouseMove を利用する場合でも似たようなもので、マウスを動かすまでは指定の位置に留まっていますが、マウスが動いた瞬間にカーソルの位置に移動してしまいます。
ボタンを利用する場合は、1度移動したら2度と動かないようにする処理が必要になるかと思います。
1度指定の位置に移動したら動かないようにするには、”指定の位置に移動した”という情報をどこかに残しておき、ムービークリップの移動処理の前に、移動済みかどうかを判断するといいでしょう。
例えば、ムービークリップ clip に、fix という変数(このような使い方をする変数は、フラグとも呼ばれます)を用意するとします。
fix には、最初は false を入れておきます。
移動処理の前に if 文で fix の値を判断し、false の時だけ、clip をカーソルの位置に移動するようにします。
ボタンにカーソルが重なり、指定の位置に移動したときは、fix の値を true に書き換えます。
すると、if 文の条件は不成立になって移動処理が行われなくなりますので、clip は移動しなくなります。
スクリプトにしますと、次のようになります。
・clipに設定するスクリプト
onClipEvent(load)
{
//フラグの初期化:trueの時は移動禁止
fix = false;
}
onClipEvent(enterFrame)
{
//指定位置に移動していない場合のみ、カーソルの位置に移動
if( ! fix )
{
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}
・ボタンに設定するスクリプト
on(rollOver)
{
//ムービークリップを指定の位置に移動
clip._x = 100;
clip._y = 100;
//ムービークリップの移動を禁止する
clip.fix = true;
}
( 100 , 100 ) といった特定の座標ではなく、ムービークリップの座標や変数の値を指定することもできます。
ただし、#1にも書いた通り、Flash 5 ではボタンインスタンスの座標を ActionScript で操作することができません。
例えばボタンの位置に移動させたい場合は、もちろん、ボタンの座標を直接指定すればいいのですが、ボタンの配置を変えるたびにスクリプトも変更しなければならず、あまり効率的ではありません。
ムービークリップであれば ActionScript で座標を操作できますから、自分自身の座標に移動させることは簡単です。
しかし、ムービークリップでは rollOver イベントが利用できません。そこで、カーソルが重なったかどうかを判断する方法が必要になります。
よく使われる手法は、ムービークリップに透明なボタンを重ねておき、このボタンで rollOver イベントを検出して利用する方法と、ムービークリップと特定の座標との衝突を検出する hitTest メソッドで、ムービークリップとカーソルの座標の衝突判定をとる方法です。
ここでは後者の、カーソルの座標との衝突判定をとる方法をご紹介します。
ボタンの代わりにムービークリップをステージに配置し、インスタンス名を付けます。ここでは仮に、hit_area という名前にします。
hit_area では、enterFrame イベントを利用して、常時、カーソルとの衝突判定をとります。カーソルの座標が自分と接触していれば、カーソルが重なっていると見なすことができます。
この時、clip の座標を自分の座標に書き換えると、clip は hit_area の位置に移動してくるようになります。
hit_area に設定するスクリプトは、次のようになります。clip のスクリプトは、前述のスクリプトと同じです。
onClipEvent(enterFrame)
{
//カーソルが重なっている場合
if( this.hitTest( _root._xmouse , _root._ymouse , true ) )
{
//ムービークリップをこの場所に移動
_parent.clip._x = this._x;
_parent.clip._y = this._y;
//ムービークリップの移動を禁止する
_parent.clip.fix = true;
}
}
clip を吸着させて2度と動かなくするには、先述の方法と同様に、フラグに情報を残しておきます。
_parent.clip.fix = true;
この部分を削除しますと、hit_area 上にカーソルがある間は clip は hit_area に吸着していますが、hit_area からカーソルが離れると、再びカーソルとともに移動するようになります。
#1にも書きましたように、ムービークリップ同士の場合は階層の指定が違いますので、ご注意ください。
No.1
- 回答日時:
ボタンの rollOver イベントを利用して、ムービークリップの座標を書き換えてはいかがでしょうか。
例えば、ステージに、ムービークリップのインスタンス clip とボタンがあるとします。
ボタンに
on(rollOver)
{
clip._x = 100;
clip._y = 100;
}
(↑このスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
とアクションを設定すると、ボタンにカーソルが重なった時、clip が ( 100 , 100 ) の地点に移動します。
ボタンのアクション on の中で他のムービークリップを操作する時は、階層の指定にご注意ください。
ステージにボタンとムービークリップ clip がある場合は、2つとも同じ親( _root )の子同士、という関係になっています。
しかし、ActionScript でのボタンのインスタンスは1つの階層とは見なされず、ボタンの階層はボタンが存在する階層と同じになります。つまり、ステージにあるボタンの階層は _root となります。
よって、ボタンから _root 階層にある clip を指定する場合、親のタイムラインを参照する _parent は不要です。
なお、ムービークリップ同士であれば、ムービークリップはそれぞれ独立した階層です。あるムービークリップから、自分と同じ親の別の子の階層を参照するには、_parent が必要になります。
階層さえ正しく指定できれば、どのボタンやムービークリップからでも、他のムービークリップを操作できます。
ただし、Flash 5 には、MovieClip オブジェクトのボタン版ともいえる Button という ActionScript のオブジェクト(これは Flash MX から登場します)がありません。
そのため、ボタンインスタンスの位置を ActionScript で操作したり、座標を取得して利用することはできません。これらの操作が必要な場合は、ボタンシンボルではなくムービークリップシンボルを利用してください。
この回答へのお礼
お礼日時:2004/11/23 11:23
回答ありがとうございます。
無事任意の位置に出すことはできました。
これを例えば、スタート位置から「動いてきたように」見せるにはどうしたらいいのでしょうか?
イメージとしてはマウスカーソルのところにくっついて動くムービーみたいな感じです。
ちなみに使用しているのはFLASH5です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- Excel(エクセル) Excel 区切り位置指定ウィザードの選択データプレビューで全列を指定する方法 お世話になります。E 1 2023/01/17 16:36
- HTML・CSS CSS上での計算を行うためのルールについて教えてください。 3 2022/08/15 14:43
- Word(ワード) Word文書のドラッグ操作による配置調整。 1 2022/10/16 19:24
- その他(IT・Webサービス) micro soft teamsのカメラ設定について 1 2023/05/25 18:07
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Excel(エクセル) MID関数について 2 2022/04/22 09:13
- HTML・CSS svgクリップパスの応用コーディング方法 2 2022/04/09 09:07
- Excel(エクセル) エクセルの図形の配置で位置揃えをする時、動かさずに基準となる図形を指定したい 1 2022/12/06 15:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコンボボックスの年月表示...
-
スマホでサイトの画像を長押し→...
-
Giam
-
potplayerについて質問です
-
拡張子「swf」の再生方法について
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウス自体の移動量の取得
-
楕円の軌道に傾斜をつける方法...
-
[AS3]自動的に画像が重なってい...
-
MCが放物線を描いて移動
-
FLASHでロールオーバーで他のム...
-
C言語でのマウスを移動とマウス...
-
角度を指定して回転
-
画面の範囲選択
-
正6面体を一定の角度で回転さ...
-
MCの移動,透明の仕方について...
-
Actionscriptでふわふわ感を再...
-
ムービー上の特定の座標上にマ...
-
スライドバーを用いて画面の拡...
-
AS2 初心者です オブジェク...
-
FLASHでの座標取得
-
flashの横幅をどのブラウザで見...
-
進行方向に徐々に停止するスク...
-
ActionScript
-
FLASHのActivescriptでオブジェ...
-
マウスを近づけるとオブジェク...
おすすめ情報