![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
FlashのActionScript勉強中のものです。これまでプログラミングの経験などはないものです。
よろしくお願いします。
Flashでマウスで対象のMCボールを投げるというtipsの中で下記のように書かれています。
「 投げたときのスピードや方向は何を求めれば計算できるかといえば、ボールを離した時の位置と、その直前の位置がわかりさえすれば求めることができます。
簡単にするために横方向、つまりx方向だけを考えることにします。ボールを離した時の位置(仮にx2とします。)、その直前の位置(仮にx1とします)がわかれば、x方向のスピードはx2-x1で求めることができます。
ボールを離した時のx2の位置はそのままボールの現在位置ですので、すぐわかりますが、
その直前の位置はどうやればわかるでしょうか?
結論から言うと直前の位置x1に前回計算したx2の位置を代入してやります。そうすると、常にx1はx2の直前の値が入ることになります。スクリプトで書くとこうなります。
x1 = x2;
x2 = this._x;
speed = (x2-x1);
この3行の式をこの順番で延々計算を繰り返していると考えると、x2には現在の位置、x1には前回計算したときの現在位置つまり直前の位置が入っていることになります。そして、x方向のスピードspeedは常にx2とx1との差として求められています。 」
とあるのですが、なぜ x1 が直前の数値となるのかが上手く理解出来ません。
仮に _xが
1fpsで_x=5
2fpsで_x=10
3fpsで_x=20
4fpsで_x=40
5fps(現地点)で_x=55
だったとして、x1もx2も55という事なのでは??と思ってしまいます。
なぜ、x1に直前の値(例では4fpsでの_x=40)がx1に入ることになるのでしょうか?
ご教授いただきたく思います。
よろしくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
#2です。
説明の数値が変になっています。
> なぜそうなるかを1フレームずつ考えます。
~ ~
> あとは繰り返しです。
の間を訂正させてください。
----訂正↓--------------------------------
なぜそうなるかを1フレームずつ考えます。
1フレームで_x=5 … x1 = ? , x2=5
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 は何も定義されていません。
したがって,x1 も未定義 undefined になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 5 となります。
2フレームで_x=10 … x1 = 5 , x2=10
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は前のフレームで代入された値 5 になっています。
したがって,x1 = 5 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 10 となります。
3フレームで_x=20 … x1 = 10 , x2=20
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は前のフレームで代入された値 10 になっています。
したがって,x1 = 10 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 20 となります。
あとは繰り返しです。
-------------------------------------------
すみません。
以上,訂正でした。
sassakunさん、tux_the_penguinさん、ご回答ありがとうございます。
1fps(_x =?)
x1(未) = x2(未);
x2(未) = this._x;(未)
speed = (x2 - x1); (未)-(未) == (未)
2fps(_x =5)
x1(未) = x2(未);
x2(5) = this._x;(5)
speed = (x2 - x1); (5)-(未) == (5)
3fps(_x =10)
x1(5) = x2(5);
x2(10) = this._x;(10)
speed = (x2 - x1); (10)-(5) == (5)
4fps(_x =15)
x1(10) = x2(10);
x2(15) = this._x;(15)
speed = (x2 - x1); (15)-(10) == (5)
5fps(_x =20)
x1(15) = x2(15);
x2(20) = this._x;(20)
speed = (x2 - x1); (20)-(15) == (5)
という感じで書き出しして一つ一つ書き出して順に確認してみて、理解出来た気がします。変数で代入する時は右から左へ計算が流れるようなかたちとなるところなどがポイントのような感じがしました。
大変参考になりました。
ご回答ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?5a7ff87)
No.2
- 回答日時:
#1の方の書かれていることで良いと思います。
例で説明します。
まず訂正で,
> 1fpsで_x=5
> 2fpsで_x=10
… …
と書かれていますが,
fps はフレームレートの単位で
frame per second (○ フレーム毎秒)のことです。
フレームレートは変化させないので,単にフレームという意味だとします。
1フレームで_x=5
2フレームで_x=10
3フレームで_x=20
4フレームで_x=40
5フレーム(現地点)で_x=55
物体が上のような座標を通過したとして,
1フレームごとに
x1 = x2;
x2 = this._x;
speed = (x2-x1);
が実行されたとすると,
x1 と x2 には次のような値が入ります。
1フレームで_x=5 … x1 = ? , x2=5
2フレームで_x=10 … x1 = 5 , x2=10
3フレームで_x=20 … x1 = 10 , x2=20
4フレームで_x=40 … x1 = 20 , x2=40
5フレーム(現地点)で_x=55 … x1 = 40 , x2=55
なぜそうなるかを1フレームずつ考えます。
1フレームで_x=5 … x1 = ? , x2=5
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 は何も定義されていません。
したがって,x1 も未定義 undefined になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 5 となります。
2フレームで_x=10 … x1 = 5 , x2=10
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は 10 になっています。
したがって,x1 = 10 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 10 となります。
3フレームで_x=20 … x1 = 10 , x2=20
x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は 20 になっています。
したがって,x1 = 20 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 20 となります。
あとは繰り返しです。
プログラムは普通上から実行されます。
もしかかれているプログラムが,
x2 = this._x;
x1 = x2;
speed = (x2-x1);
であれば,
ご質問で書かれているように,x1 と x2 は常に等しくなります。
1フレームで_x=5 … x1 = 5 , x2=5
2フレームで_x=10 … x1 = 10 , x2=10
3フレームで_x=20 … x1 = 20 , x2=20
4フレームで_x=40 … x1 = 40 , x2=40
5フレーム(現地点)で_x=55 … x1 = 55 , x2=55
x2 = this._x;
x1 = x2;
ではなく,
x1 = x2;
x2 = this._x;
なので,x1 と x2 の値は常に1フレーム分の差が開きます。
No.1
- 回答日時:
シンプルに考えてみましょう
数学でA=2と言うときには 「A と 2 は等しい」 と読みますね
ところがプログラミングでは 「A は 2 になる」と読みます。
(「Aに2を代入する」と書いてある本も多いと思います。同じ意味です)
…なので一行めの x1=x2; は「x1の値はx2が今持っているものになる」で、二行めの x2=this._x; は「x2の値は現時点でのxの位置になる」です。そして3行めで「speedの値はx2からx1を引いたものになる」わけです。
今、5フレーム目だとしてxの位置が55だったとしても、まだ処理をしてないので、x2には4フレーム目で導き出したxの位置の値が入っているわけです。そしてこの状態で一行めの処理を始めます。
こんな説明でなにかわかることがあればいいのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- 数学 線形代数の対称行列についての問題がわからないです。 2 2023/01/08 14:59
- 物理学 2物体の単振動 1 2023/08/17 20:27
- 数学 数学直線の方程式とベクトル方程式について 直線の方程式で 点(x1,y1)を通り、直線ax+by+c 1 2022/08/12 12:13
- 物理学 合成波の式がF(t,x)=2A{(2m-1)πx/2L}cos(2πft) mは自然数とすると、この 7 2023/06/16 04:08
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- 物理学 線音源の減衰の問題について教えてください。 7 2023/01/04 11:08
- 物理学 二つの光時計 2 2022/06/02 16:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
paraflaではじめてFLASHを作り...
-
ビルダー2001:フレームの保存
-
フレーム内に移動したい
-
2倍速を等速動画に(車載動画)
-
○○フレームまで行ったら、同一...
-
ScrollPaneで読み込んだswfがは...
-
フレームからフレームへの移動...
-
オシロスコープのような描写方...
-
URLを隠す、または別アドレスな...
-
suzukaのタイムラインの設定に...
-
MCのgotoAndPlay制御について
-
Studio MX 2004 pro
-
プルダウンメニューの件で、至...
-
フレームを使ったJavascriptのh...
-
大元のタイムラインの変数を初...
-
flash lite1.1 トップページ画...
-
Access2010でサブフォームのフ...
-
手前でキャラクタがループ動作...
-
タイムラインを定期的にスター...
-
gotoAndPlayで反応がありません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレーム内に移動したい
-
Access2010でサブフォームのフ...
-
#1009: null のオブジェクト参...
-
車の運転時のメガネ 縁なし(...
-
VBで動的に作成したパネルの上...
-
キーフレームとはなんですか?
-
【C++】IDirect3DSurfaceのディ...
-
VBAでIE操作時のLocationURLとURL
-
フレーム内のオプションボタン...
-
iframeはSEO的に不利になる?
-
2倍速を等速動画に(車載動画)
-
トグルボタンの排他制御でご教...
-
チェックボックスを横並びに表...
-
フレーム間の処理2
-
MacBook Airで作成するトレス動...
-
ソーラーパネルのアルミフレー...
-
ドロップフレームの計算をエク...
-
Directshowを使って動画を画像...
-
フレーム内でのリダイレクトに...
-
英語で「フレームの右上」
おすすめ情報