No.1ベストアンサー
- 回答日時:
ランダムと言っても色々な動きがあるので,
よくわかりませんね。
例えば,
MCをブラウン運動させたい。
http://oshiete1.goo.ne.jp/qa2544252.html
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/qa2544252.html
このご質問↑のように,
「ブラウン運動」 という見たことのあるランダムな動きだと,
「ブラウン運動」 の動画でも一生懸命見て,なんとか再現できる場合もあります。
しかし,
なんとなく,このご質問では「ブラウン運動」 のような動きを求めていらっしゃるのではないような気がします。
※ちなみに上の URL のスクリプトには間違いがあります。
Math.Random() →訂正→ Math.random() です。
というわけで,
以下は,ランダムと言っても色々な動きがあるため,
「ランダムな動き」がどういう動きなのかわからない状態での回答です。
わからないので,一応,3例書きます。
根本的には上の「ブラウン運動」と同様に,
ランダムな角度を出して,
その角度の方向に 「●という物体」 を動かします。
Flash以前の基礎知識ですが,
角度は,主に2つの表し方があります。
1つは degree(度) 単位の角度の表し方で,
もう1つは radian(弧度) 単位の角度の表し方です。
ActionScript では,
radian(弧度) 単位の角度がデフォルトです。
また,
モニタの座標と同じでステージの左上を (x,y)=(0,0) とした座標になっています。
したがって,
degree(度)単位の角度 と,radian(弧度)単位の角度 とは,
次の図のような関係になります。
degree(度)単位の角度
270
↑
180←┼→0 (360)
↓
90
radian(弧度)単位の角度
3/2 π
↑
π←┼→0 (2π)
↓
1/2 π
また,ActionScript では,
π や sin や cos の値は次のようにして求められます。
π(= 3.14159……) → Math.PI
cos(θ) → Math.cos(θ)
sin(θ) → Math.sin(θ)
以上が基礎知識です。
もし,何のことやらさっぱりわからない場合は,
高校数学の教科書か参考書あたりでも再読(?)してみてください。
次に作成手順です。
「●という物体」 を,まずムービークリップに変換します。
変換するときの注意点ですが,
基準点を中央にしてムービークリップに変換してください。
基準点は実際はどこでも良いのですが,
次に示すスクリプトは,ムービークリップの基準点が中央にあると仮定しているスクリプトのため,
ムービークリップの基準点は中央にしてください。
そして,
●という物体 のムービークリップ自体を選択して,
そのムービークリップ自体に次のようなスクリプトを書けば,
「ステージの端にぶつかったときにランダムな方向に動く向きを変えるムービークリップ」
ができます。
---------------------------
onClipEvent (load) {
// スピードの設定 (可変)
var spd = 10;
// 変数 kaku(角) に 0~2π までの乱数を取得
var kaku = Math.random()*2*Math.PI;
}
//
onClipEvent (enterFrame) {
// もしステージ左にぶつかったら
if (this._x<=this._width/2) {
// 壁に当たった点付近に戻す
this._x = this._width/2;
// kaku に -1/2π(3/2π)~1/2π までの乱数を取得
kaku = Math.random()*Math.PI-(Math.PI/2);
//
// もしステージ上にぶつかったら
} else if (this._y<=this._height/2) {
// 壁に当たった点付近に戻す
this._y = this._height/2;
// kaku に 0~π までの乱数を取得
kaku = Math.random()*Math.PI;
//
// もしステージ右にぶつかったら
} else if (this._x>=Stage.width-(this._width/2)) {
// 壁に当たった点付近に戻す
this._x = Stage.width-(this._width/2);
// kaku に 1/2π~3/2π までの乱数を取得
kaku = Math.random()*Math.PI+(Math.PI/2);
//
// もしステージ下にぶつかったら
} else if (this._y>=Stage.height-(this._height/2)) {
// 壁に当たった点付近に戻す
this._y = Stage.height-(this._height/2);
// kaku に π~2π までの乱数を取得
kaku = Math.random()*Math.PI+Math.PI;
}
//
// 座標の移動
this._x += spd*Math.cos(kaku);
this._y += spd*Math.sin(kaku);
}
---------------------------
(可変) の付いている行の数値(値)は,適当に変えてください。
上の例は,
"ぶつかったとき" にランダムな方向に動く向きを変える ムービークリップのスクリプトです。
ご質問にあるランダムな動きとは,
上のような動きかもしれませんし,違うかもしれません。
「ランダムと言っても色々な動きがあるのでよくわからない。」
と最初に書いたのはそういうことです。
"ぶつかったとき" だけにランダムな方向に動く向きを変えるのではなくて,
"ぶつからなくてもたまに" ランダムな方向に動く向きを変える場合は,次のようになります。
---------------------------
onClipEvent (load) {
// スピードの設定 (可変)
var spd = 10;
// 動き方を変える頻度の設定(可変)
var freq = 5;
// 変数 cnt の初期値
var cnt = 0;
//
// 変数 kaku(角) に 0~2π までの乱数を取得
var kaku = Math.random()*2*Math.PI;
}
//
onClipEvent (enterFrame) {
// もしステージ左にぶつかったら
if (this._x<=this._width/2) {
// 壁に当たった点付近に戻す
this._x = this._width/2;
// kaku に -1/2π(3/2π)~1/2π までの乱数を取得
kaku = Math.random()*Math.PI-(Math.PI/2);
//
// もしステージ上にぶつかったら
} else if (this._y<=this._height/2) {
// 壁に当たった点付近に戻す
this._y = this._height/2;
// kaku に 0~π までの乱数を取得
kaku = Math.random()*Math.PI;
//
// もしステージ右にぶつかったら
} else if (this._x>=Stage.width-(this._width/2)) {
// 壁に当たった点付近に戻す
this._x = Stage.width-(this._width/2);
// kaku に 1/2π~3/2π までの乱数を取得
kaku = Math.random()*Math.PI+(Math.PI/2);
//
// もしステージ下にぶつかったら
} else if (this._y>=Stage.height-(this._height/2)) {
// 壁に当たった点付近に戻す
this._y = Stage.height-(this._height/2);
// kaku に π~2π までの乱数を取得
kaku = Math.random()*Math.PI+Math.PI;
//
// 上記以外のとき(つまり普通のとき)
} else {
// 変数 cnt に 1 を加算
cnt++;
// もし cnt が freq で割り切れたら
if (cnt%freq == 0) {
// 2πまでの乱数を取得
kaku = Math.random()*2*Math.PI;
}
}
//
// 座標の移動
this._x += spd*Math.cos(kaku);
this._y += spd*Math.sin(kaku);
}
---------------------------
この場合は,
本当に無茶苦茶な方向に動く向きを変えます。
ご質問にあるランダムな動きとは,
上のような動きかもしれませんし,違うかもしれません。
上のように,
本当に無茶苦茶な方向に動く向きを変えるのではなくて,
ある程度規則性を持ったランダムの場合は次のようになります。
イメージとしては,無雑作に飛び回る蜂のような感じです。
蜂などはランダムに飛び回るとしても,
いきなりは飛ぶ向きを変えないわけで,
ある範囲内で頭の角度を変えるはずです。
---------------------------
onClipEvent (load) {
// スピードの設定 (可変)
var spd = 10;
// 角度を変える範囲を指定 (可変:例=90度)
var dsp = 90;
//
// 変数 kaku(角) に 0~2π までの乱数を取得
var kaku = Math.random()*2*Math.PI;
}
//
onClipEvent (enterFrame) {
// もしステージ左にぶつかったら
if (this._x<=this._width/2) {
// 壁に当たった点付近に戻す
this._x = this._width/2;
// kaku に -1/2π(3/2π)~1/2π までの乱数を取得
kaku = Math.random()*Math.PI-(Math.PI/2);
//
// もしステージ上にぶつかったら
} else if (this._y<=this._height/2) {
// 壁に当たった点付近に戻す
this._y = this._height/2;
// kaku に 0~π までの乱数を取得
kaku = Math.random()*Math.PI;
//
// もしステージ右にぶつかったら
} else if (this._x>=Stage.width-(this._width/2)) {
// 壁に当たった点付近に戻す
this._x = Stage.width-(this._width/2);
// kaku に 1/2π~3/2π までの乱数を取得
kaku = Math.random()*Math.PI+(Math.PI/2);
//
// もしステージ下にぶつかったら
} else if (this._y>=Stage.height-(this._height/2)) {
// 壁に当たった点付近に戻す
this._y = Stage.height-(this._height/2);
// kaku に π~2π までの乱数を取得
kaku = Math.random()*Math.PI+Math.PI;
// 上記以外のとき(つまり普通のとき)
} else {
// 指定範囲内で角度を変える
kaku += Math.random()*(Math.PI/180*dsp)-(Math.PI/360*dsp);
}
//
// 座標の移動
this._x += spd*Math.cos(kaku);
this._y += spd*Math.sin(kaku);
}
---------------------------
というように,
ランダムと言っても色々あります。
勉強するにあたって参考になりましたら利用してみてください。
あと,Flash のバージョンを書かれていませんが。
たまたま,今,
手元に Flash 5 を入れた PC がないため,検証まではしていませんが,
上記スクリプトは Flash 5 以上 (Flash 5 ,MX,MX2004,8) の全て作成可能なスクリプトのはずです。
Flash Player 5 以上にパブリッシュした SWF で閲覧可能です(それは検証済み)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) iphoneで撮影した写真、動画を連番のファイル名で保存したい。 1 2022/04/28 02:12
- Excel(エクセル) ランダムで四択の問題を作る場合にvbaで何を学べばいいでしょうか。 1 2022/04/14 16:45
- USTREAM 映像・動画編集にお詳しい方、教えて下さい。 2 2023/03/05 07:22
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- 美術・アート 絵のパースと望遠、広角についてです。 物体の消失点が物体に近いと広角、遠いと望遠になるらしいです。ま 2 2022/09/03 17:20
- レトロゲーム ファミコンのインベーダの質問その3 背景にインベーダーを描画したとしても、なぜ動けるのか? 3 2022/07/08 16:58
- AJAX RPA(PowerAutomate)の実装について 1 2023/07/31 13:46
- JavaScript スマホ上で、左右スワイプで次のページに移動させたいです 2 2022/11/11 17:04
- レトロゲーム 初代PSのゲームで思い出せないソフトがあります。 1 2023/01/06 20:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マウス自体の移動量の取得
-
画面の範囲選択
-
VBAで改行の入ったデータの正規...
-
arduino プログラムについて
-
コモンダイアログのshowopenに...
-
テキストボックスの中身をリセ...
-
別のアプリケーションのテキス...
-
シンボル化解除の方法
-
VBScriptでMsgBoxのYesNoボック...
-
テキストボックスにセルの値を...
-
四乗根を英語で言うと・・・
-
VB6.0 でメニューを作りたいん...
-
pythonの画像の貼り付けについて
-
SNMPの標準MIBについて
-
YOASOBI
-
マスクをとるとオーバーフロー...
-
else if文の順序を変えることに...
-
PYTHONのtkinterについて
-
ダブルクリックと2回クリックの...
-
UWSCのBTN関数について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウス自体の移動量の取得
-
正6面体を一定の角度で回転さ...
-
楕円の軌道に傾斜をつける方法...
-
マウスオーバー(クリック)画...
-
MCの移動,透明の仕方について...
-
画面の範囲選択
-
C言語でのマウスを移動とマウス...
-
スライドバーを用いて画面の拡...
-
ボタン化されたMCの移動
-
sinとcosを使って10度毎に線...
-
クリックして文字
-
photoshopで書いた四角の枠の中...
-
VBScriptでMsgBoxのYesNoボック...
-
webページ上、TABフォーカス出...
-
プログラミング、アーキテクチ...
-
VBAで改行の入ったデータの正規...
-
python ボタンを押すと複数の関...
-
YOASOBI
-
RPG(AS400)の本、サイトってあ...
-
別のアプリケーションのテキス...
おすすめ情報