お世話になります。
あともう少しのところでうまくいきません。
質問はタイトルの通りなんです。本や、サンプルをいろいろ研究して、
キラキラがランダムに発生するスクリプトを書いたんです。
何がしたいかというと、ムービークリップ「mc_stage」の上だけにキラキラをランダムに発生させたいんです。
sw = mc_stage._width;
sh = mc_stage._height;
level = 1;
this.onEnterFrame = function() {
if (Math.random()*10>9) {
level++;
newname = "Fwks"+level;
Fwks.duplicateMovieClip(newname, level);
this[newname]._x = Math.random()*sw;
this[newname]._y = Math.random()*sh;
}
if (level>8) {
this.onEnterFrame = undifined;
}
};
この形だと、mc_stageの幅と高さを取得するだけで、座標を取得していません。なので、ステージの左上からmc_stageのwidthとheightの範囲できらきらが発生してしまいます。
どうしたらきちんとmc_stageの上だけでランダムに発生させれますか?ぜひおしえてください!
No.1ベストアンサー
- 回答日時:
mc_stage がステージ内のどの座標を占めているかを調べ、その範囲内にキラキラを出現させてはいかがでしょう。
あるムービークリップが占める座標は、幅・高さと _x ・ _y をもとに自分で算出することも可能ではありますが、それよりも、MovieClip クラス( Flash MX 以前はオブジェクト)が持っている” getBounds ”というメソッドで簡単に取得できます。
このメソッドで分かるものとは、あるムービークリップが占めている空間の、X座標とY座標のそれぞれ最小値と最大値です。
細かいことを抜きにして簡単に言いますと、選択ツールでムービークリップを選択した時に表示される四角形のマーカーの、四隅の座標が判明するということです。
これらの座標の範囲内で乱数を作成すれば、特定のムービークリップの上にだけキラキラを出現させることができます。
なお、Flash Player 8 からは” getRect ”といって、getBounds と似たような機能のメソッドも利用できるようになりました。
getBounds との違いは、大きさの計測に線の幅を含むかどうかです。
線の幅も含んだ座標を返してくる getBounds に対し、線を含まない座標を返す getRect の戻り値は、線の分だけ値が小さくなります。
今回はさしあたって、古いバージョンの Flash Player でも使える getBounds を使用した作例をご紹介します。
------------------------------------------------------------
ステージに、ムービークリップ” mc_stage ”があるとします。
この上にだけキラキラのムービークリップ” Fwks ”の複製をランダムに配置するスクリプトは、大体、次のようになります。
このスクリプトは、メインのタイムラインのフレームに記述してください。
mc_stage が占める座標を取得する部分を追加した点と、キラキラの出現範囲の求め方を変更したことを除けば、ご提示のスクリプトと同じです。
(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)
/**********************************************************/
//mc_stageが占める座標空間の情報を取得
//基準にする座標系はステージ(=_root)
bounds_obj = new Object();
bounds_obj = mc_stage.getBounds( _root );
//キラキラの出現範囲
x_min = bounds_obj.xMin;
x_max = bounds_obj.xMax;
y_min = bounds_obj.yMin;
y_max = bounds_obj.yMax;
//指定の範囲内にキラキラを出現させる
level = 1;
this.onEnterFrame = function() {
if (Math.random()*10>9) {
level++;
newname = "Fwks"+level;
Fwks.duplicateMovieClip(newname, level);
//---------------- この部分を変更 ----------------
//this[newname]._x = Math.random()*sw;
//this[newname]._y = Math.random()*sh;
this[ newname ]._x = Math.floor( Math.random() * ( x_max - x_min + 1 ) ) + x_min;
this[ newname ]._y = Math.floor( Math.random() * ( y_max - y_min + 1 ) ) + y_min;
//---------------- 変更ここまで ----------------
}
if (level>8) {
this.onEnterFrame = undifined;
}
};
/**********************************************************/
冒頭の bounds_obj = mc_stage.getBounds( _root ); で、mc_stage がステージ上で占めている座標の情報が、変数 bounds_obj に入ります。
getBounds が返してくる値はXおよびY座標の最小・最大と、値が4つあるため、汎用型である Object 型の変数を作って受け取ります。
受け取った4つの値を識別する xMin や yMax などの名前は、getBounds の中で予め決められています。
言うなれば、値を受け取るための入れ物を1つ渡すだけで、getBounds の方で仕切りを作り、値を分けて返してくれるようなものです。
getBounds から受け取った値をそれぞれ見るには、渡した入れ物の名前と仕切りの名前の2つが必要です。
先のスクリプトでは、渡した入れ物の名前は” bounds_obj ”ですから、例えばX座標の最小値を見る時は
x_min = bounds_obj.xMin;
というように書きます。
mc_stage が占める座標を取得したら、これらをもとにキラキラの出現位置をランダムで決めます。
つまり、基本的には、キラキラのX座標は mc_stage が占めるX座標の最小から最大値まで、Y座標も同様に mc_stage が占めるY座標の最小から最大値の範囲で決めればいい、ということになります。
ただし、これだけですと、mc_stage の範囲ギリギリにキラキラが出現する可能性もあります。
mc_stage の端スレスレの位置に出現した場合は、キラキラの端が欠けたり、はみ出して見えることになります。
上記のスクリプトでは省略していますが、実際には、mc_stage の範囲の他にキラキラの大きさも考慮して出現範囲を決めてください。
ある範囲内の乱数を作る方法は、Flash のテクニカルノートに説明があります。
よろしければご参考になさってください。
・ Adobe サポートデータベース:
Math.random() でランダムな整数を取得する方法
http://support.adobe.co.jp/faq/faq/qadoc.sv?2286 …
お礼が遅くなり、すみません。
教えていただいた通りやってみたらできました!
getBounds
私の持っている本にはどれにも書いていませんでした。なので今回はとても勉強になりました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- 英語 Thirty-one implants (5 in a one-stage and 26 in a 1 2023/04/03 17:01
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- 英語 サル痘の記事について 2 2022/07/24 07:07
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino プログラムについて
-
URLの/以降だけを入力したいです。
-
拡張子「swf」の再生方法について
-
Flashコンテンツを使ったWebサイト
-
ロック画面に天気を表示したい
-
大学からの課題をやるのに、Ado...
-
flash (.swf) を編集したい
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のムービークリップの上で...
-
障害物に対する衝突判定
-
MCをブラウン運動させたい。
-
Flashパブリッシュエラー
-
Flashの3Dメニューの視点を変え...
-
動かした画像を元の位置に戻すには
-
ActionScript2.0での座標について
-
Suzukaで一行ニュースティッカ...
-
プログラミング、アーキテクチ...
-
photoshopで書いた四角の枠の中...
-
YOASOBI
-
VBScriptでMsgBoxのYesNoボック...
-
テキストボックスの中身をリセ...
-
五芒星は、悪魔崇拝とどういう...
-
VBAで改行の入ったデータの正規...
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
テキストボックスにセルの値を...
-
ipconfig /releaseって何ですか?
-
UWSCのBTN関数について。
おすすめ情報