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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でのマウスを移動とマウス...
-
photoshopで書いた四角の枠の中...
-
DataTableの件数を取得したい
-
VBScriptでMsgBoxのYesNoボック...
-
VB6.0 でメニューを作りたいん...
-
VBAユーザーホームテキストボッ...
-
テキストボックスの中身をリセ...
-
IP Address 入力フォームについて
-
static関数がmapファイルに載ら...
-
python ボタンを押すと複数の関...
-
ESD保護区域等のシンボル入手先
-
Simulinkのサブシステムの完全...
-
【Photoshop】レイヤー効果の境...
-
VB.NET2005 DataGridViewでレコ...
-
C# chart controlの透過について
-
VS2008 C# ボタンのテキストを...
-
POIでのテキストボックス作成に...
-
四乗根を英語で言うと・・・
-
VBAで改行の入ったデータの正規...
-
GoogleAPIで「&」を含むURLをQ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウス自体の移動量の取得
-
画面の範囲選択
-
楕円の軌道に傾斜をつける方法...
-
FLASHでの座標取得
-
C言語でのマウスを移動とマウス...
-
MCが放物線を描いて移動
-
角度を指定して回転
-
マウスオーバーで画像ズーム(...
-
スライドバーを用いて画面の拡...
-
マウスオーバー(クリック)画...
-
マウスを追いかける
-
画面をランダムに動き回るアク...
-
回転運動の減速停止方法
-
MCの移動,透明の仕方について...
-
[AS3]自動的に画像が重なってい...
-
マウスの移動方向によってマウ...
-
ActionScript■指定回数でループ...
-
photoshopで書いた四角の枠の中...
-
Pythonを使ってせん断応力図、...
-
python ボタンを押すと複数の関...
おすすめ情報