メイン コーダーズルーム【スクリプト系】 回転についてのロジック | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
chillout | Åê¹ÆNo.8884 投稿日時: 2004-7-5 23:13 |
新米 居住地: 投稿: 8
使用環境:
MacOSX10.4, Flash CS3 |
回転についてのロジック ロジックを考えていて行き詰まってしまったのでご教示ください。
ムービークリップの現在の角度をcurrentRotationとし、 目標となる角度をtargetRotationとしたとき、 currentRotationからtargetRotation間での回転が「右回転」の方が速いか「左回転」の方が速いかを判定するロジックを考えています。 たとえば、currentRotationが45でtargetRotationが-90のときは「左回転」といった具合です。 図などに書けば一目瞭然なのですが、これをスクリプトで動的に判定したいのです。 ヒントだけでも教えていただけないでしょうか? |
野中文雄 | Åê¹ÆNo.8889 投稿日時: 2004-7-6 6:59 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 回転についてのロジック 図に描いて判断する過程を、論理的に言葉で表現することが大切です。
(1)差を取って、(2)360度に換算した正数の角度(0≦θ<360)が、(3)180より大きければ、左回りでしょう。
引用: chilloutさんは書きました: |
chillout | Åê¹ÆNo.8895 投稿日時: 2004-7-6 14:34 |
新米 居住地: 投稿: 8
使用環境:
MacOSX10.4, Flash CS3 |
Re: 回転についてのロジック こんなにスマートに記述できるのですね!
ありがとうございます。 野中さんのポストや執筆された本にはいつも勉強させていただいています。 一点理解できない部分があります。 360度に変換している部分、 (rotation%360+360)%360 ですが、なぜこのような式で変換できるのかわかりません。 結果を見ると確かに変換できているのですが、理屈が理解できないです。 公式として覚えてしまうのもいいですが、できれば理解したいと思いますので ご教示いただけないでしょうか? |
野中文雄 | Åê¹ÆNo.8897 投稿日時: 2004-7-6 15:35 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 回転についてのロジック 理屈がわかりませんと、応用できませんね。理解は大事だと思います。
引用: chilloutさんは書きました: 今日から数えて70日後は、何曜日でしょう? 火曜日であることは、すぐにおわかりになりますね。1週間は7日周期ですから、7で割算した余り(剰余)が同じ日は、同じ曜日になるからです。 逆に、ある範囲の整数を周期的に得たい場合には、その範囲となる整数の剰余を利用します。MovieClipインスタンスにつぎのMovieClipアクションを設定すると、時計回りに回転するとともに、変数nRotationの値とそれを360で割った剰余が[出力]されます。剰余は1周360度ごとに、0に戻ることがわかります。
しかし、実際のMovieClip._rotationプロパティは、-180より大きく180以下の値を返します。これを0から360の正数にするには、割る数360を加えればよいでしょう。ある日の丁度1週間後の曜日は、その日と同じはずだからです。
MovieClip._rotationプロパティと異なり、変数nRotationは-3600という値を取るかもしれません。その場合360を加えたのでは足りません。では、正数になるまで(つまり10回)360を足さなければならないでしょうか? マイナスの値も360の剰余を取れば、必ず-360より大きい数値になります。 改めて、最初の式をご覧ください。 |
chillout | Åê¹ÆNo.8898 投稿日時: 2004-7-6 16:08 |
新米 居住地: 投稿: 8
使用環境:
MacOSX10.4, Flash CS3 |
Re: 回転についてのロジック いただいた解説を理解できるまでよく読んでみます。
まだ完全には理解できていませんが、目から鱗状態です。 本当にありがとうございました! |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |