• ベストアンサー

時計の針を回転させる

テキスト入力ボックス と 時計の針 を作り、テキスト入力ボックスに3と入力すると90度に針が傾き3時を指し、6と入力すると針が180度傾き6時を指す というASを書きました。 onClipEvent ( enterFrame ){   H01 = (360/12)*_root.HTjikan;   /*変数01 = 360度を12分割 × 変数テキスト時間(テキスト入力枠)で時計の針の角度を算出*/   this._rotation = this._rotation+((H01-this._rotation)/2);   /*1/2づつ針が回転して行き、目的の角度になったら制止 */ } しかし、上記ASだと180度以上(6時以降)に設定すると、針が指定のところで止まらず、ぐるぐる回ってしまいます。自分なりに調べてみると、_rotationが180度を超えると -180 を返している為、上記の式では対応できず、針がぐるぐる回ってしまうという状態です。 6時以降も同様に時計の針を動かしたいのですが、何か良い方法はないものでしょうか? アドバイスやご教授をいただけたらと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.2

ここに回答するときではなく, 現実の自分の作成上の問題として, たまに質問者さまと同じ問題に遭遇することがありますよ。 そのとき,私はいつも, ムービークリップを直接回転させるのではなく, まずダミーの変数を回転(変動)させて, そのダミーの変数の値をムービークリップの角度に代入しています。 間に変数をかませてワンクッション置くということです。 /////////////////////////////////////////////////// onClipEvent (load) {   dummy = 0;   /* ↑ダミーの変数 dummy を初期化*/   /* Flash Player 7 以上にパブリッシュするときに必要*/ } onClipEvent (enterFrame) {   H01 = (360/12)*_root.HTjikan;   /*変数H01 = 360度を12分割 × 変数テキスト時間    (テキスト入力枠)で時計の針の角度を算出*/   if (!isNaN(H01)) {     /*もし H01 が 非数(NaN) でなければ*/     dummy = dummy+((H01-dummy)/2);     /*ダミーの角度を目的の角度まで変えて行く */     this._rotation = dummy;     /*針の回転にダミーの値を代入 */   } } /////////////////////////////////////////////////// (↑同じく各行の先頭には全角空白文字を入れています。) _rotation には実体(実際の角度)が存在するため, 他の変数が 非数(NaN) になった場合でも復活することができます。 しかし, 変数 dummy は単なる変数であるため, 一度 非数 になると,  dummy = dummy+((H01-dummy)/2); の加算後代入の部分で 非数に数を足すことができなくなり, 数に復活できなくなります。 したがって,  if (!isNaN(H01)) { で, H01 が非数でないときに限って, dummy を代入後加算する必要が出てきます。 H01 が非数になるときとは, テキストフィールド の値が ""(空白) になるとき, つまり,いったん値を消して別の値を入力するときです。 「ダミーとなる変数を用意する」 ということと, 「if (!isNaN(H01)) {} が必要である」 というだけのことで, 動かすエンジン部分のスクリプトは質問者さまが書かれたスクリプトそのままです。 ご参考までに。

thank001
質問者

お礼

sassakunさん、書き込みありがとうございます。 基本を私に合わせる形でご回答いただき、ありがとうございます。 1カ所だけ( !isNaN )私には謎でしたが、1カ所だけ謎というのが何か課題を出されたようで、ここだけ調べて一つステップアップ(^0^)という感じで、とても良い勉強をさせていただいている気分になってきます。 大変参考になり勉強になります。(^^) 書き込みいただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.1

言葉だけだと説明しにくいのでASとともに。 確認の際は要全角スペース削除 コピペ -> 検索 -> 検索文字列: (全角スペース) 置換:(未入力) -> すべて置換 onClipEvent (enterFrame) {  // 変数01 = 360度を12分割 × (変数テキスト時間/12の余り)で時計の針の角度を算出  H01 = (360/12)*(_root.HTjikan%12);  // 変数02 = 現在の_rotationを360で表現  if (this._rotation<0) {// _rotationがマイナスの時だけ調整   H02 = 360+this._rotation;   // 例1 -180°(6時の角度) 360°+ -180°= 180°   // 例2 -90°(9時の角度) 360°+ -90°= 270°  } else {   H02 = this._rotation;  }  // (おまけ)いつも時計回りで目的角度に向かって回転したい  if(H01 < H02){   H01 += 360;  }  //  this._rotation = H02+(H01-H02)/2;  /* 現在角度から目的角度までの1/2ずつ針が回転  変数の値が-180~180の間でなくても、今回ぶつかった問題のように  自動的に修正してくれるから心配無用*/ }

thank001
質問者

補足

suzuki-_-さん、書き込みいただきありがとうございます。 大方理解できてきましたが、終わってからだとお礼が更に遅れてしまいそうなので、先にお礼書き込みとして書き込ませて頂きます。 時計回りで目的角度に回転 という部分も質問には書きませんでしたが実現したい事だったので加えて大変参考になりました。 とてもためになり勉強になっております。 ありがとうございました。(^0^)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 角度を指定して回転

    スクリプト1 //////////////////////////////////////////////////////////////// onClipEvent (load) { this.x_rotation = 0; d = 1; } onClipEvent (enterFrame) { this._rotation = _rotation += d; if (this._rotation>=90 || this._rotation<=0) { d = -d; } } //////////////////////////////////////////////////////////////// スクリプト2 //////////////////////////////////////////////////////////////// onClipEvent (load) { this.x_rotation = 0; } onClipEvent (enterFrame) { this._rotation = _rotation += 1; if (this._rotation>=90) { this._rotation = -1; } } //////////////////////////////////////////////////////////////// これは、MCが0度~90度の範囲で行ったり来たりするscriptです。 正常に動かないというわけではありませんが、スクリプト2では、90度に達した後いきなり0度に戻ってしまいます。 90度に達したら80度、70度と0度まで戻って欲しいのです。 なぜdを使うのか、スクリプト2ではダメなのかいまいちよく分かりません。 理由と考え方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flashのアナログ時計、針の精度を高めたい

    質問失礼します。 僕は、インターネットで調べながらFlashでのアナログ時計を作ったのですが、針が1秒ずつ「カチッ、カチッ」としか動かないのです。(抽象的ですがお許しください) それで、インスタンス名「jikan」に、時間の変数 hour と 分の変数 min を使って以下のように書きました。     jikan = hour * 30 + min / 2; ここまではよかったのですが、これ以上回転角度を細かく(スムーズに)することは不可能でしょうか。 できれば、そのための式を出していただけると非常に助かります。

    • ベストアンサー
    • Flash
  • 時計の長針が短針に重なり、更に追い越すのはなぜ?

    変な質問かもしれませんが、ふと思ってしまったので質問させてください。 時計でなくとも良いのですが、一番聞きやすいと思いこれを例にとりました。 長針と短針、角度で表す事ができますよね。長針がだんだん短針に近づいてくると、角度もだんだん少なくなってきます。そして、11時59分辺りでしょうか、角度も1度位になります。 そして時計は進み、針は更に狭まり、1度の次は0.9度になり、更に0.1度になると次は0.09度、、、そして、数字は無限ですから、永遠にこれを繰り返していってしまい、いつになっても角度0ゼロにならないのではないかと心配してしまいます。 しかし、何事もなく次の瞬間には時計の針はカチっと重なり、その後長針が短針を追い抜いていきます。 また別の表現方法で、例えば、普通の時計で針が重なって見えてしまう程の角度の狭さでも針を十分延長すれば先の方では大きく離れてる事でしょうし、その先の方までも重なる位の角度の狭さになっても更に宇宙規模の数万光年の長さになる針ほどに延長すれば、今尚延長された先の方は大きく離れているだろうと思いますし、(これを繰り返せば永遠に針は重ならないようで心配です) なぜでしょうか、説明がわかりづらかったかもしれませんが、解る方いましたら教えてください。

  • 時計の針の問題

    以下の問題の解法がわかりません。 いま、ある時計が9時を指しています。この時計の長針と短針のあいだの角度が初めて145度になるのは今から何分後ですか? 答 10分後 9時を指しているということは90度で 短針が動くスピードが一時間に30度 10分で5度 180度になるのは9時15分ころ? わかるかた解き方を教えてください。 よろしくお願いします。

  • 回転を使って、ハンドル操作をしたい

    いつも、ありがとうございます。MACOSX、Flash8です。 ゲームの中で、ハンドル操作ができるようにしたいのですがなかなかうまくいかなくて困っています。 マウスの座標から、角度を出してrotationしたいのですが。 MouseDownで EnterFrame、マウスをドラッグしている間にカーソルに 合わせて回転してほしいのです。 1回転する必要はなく45度とー45度の間だけで動かします。 ハンドルのトップを0として、マウス座標から計算した角度をいれることによってできないかと思っているのですが、スクリプトがうまくかけません。 宜しく、お願い致します。

    • ベストアンサー
    • Flash
  • ムービークリップの位置と角度の制御について

    スクリプト初心者です。 ●矢印の形をした、ムービークリップ(mc1)がステージ端まで移動すると跳ね返り、跳ね返る方向に向きを変えるスクリプトで悩んでいます・・。 ●ステージサイズ:400×300  シーン1、1フレーム目にmc1配置。 mc1をシーン1に配置の際、角度45度に。 mc1に下記スクリプトを書きました。 onClipEvent(load){     vx=5;     vy=5; } onClipEvent(enterFrame){ this._x += vx; this._y += vy; if (400 < this._x) { vx = -5; this._rotation=-135; } if (300 < this._y) { vy = -5; this._rotation=135; } if (this._x < 0) { vx = 5; this._rotation=-45; } if (this._y < 0) { vy = 5; this._rotation=45; } } ●ステージ端まで行くと矢印(mc1)が跳ね返る事は、出来たのですが、方向(回転角度)がうまく出来ませんでした・・。 自分でも、これでは、回転角度がうまく行かないと分かってはいるのですが・・。 どなたかお分かりの方おられましたら助けてください! よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • エクセルで16進数に代入したい。

    こんにちは、tuneoです。 エクセルで、テキストボックスを表示して、 そこに例えば「8F」と入力した文字を バイト型変数として式に代入したいのです。 例えば、テキストボックスとボタン1を配置して、 ボタン1を押すと、 バイト型配列変数 Dim a(3) as Byte に a(0)=&h8F というように代入したいのです。 出来れば、テキストボックスに 「8F0E5BAF」と入力すると a(0)=&h8F a(1)=&h0E a(2)=&h5B a(3)=&hAF と代入できるとさらにOKなのですが。。。。

  • ゼンマイ式の柱時計が止まる理由

    ドイツ製のゼンマイ式柱時計を買いましたが、時々止まってしまいます。特に針を合わせたとき、ゼンマイを巻いた時などです。 一回順調に動き始めるとゼンマイの効いている数週間は動き続けるので故障ではないとおもうのですが・・・ 時計の設置角度とか針のいじり方とか何かノウハウがあるのでしょうか?

  • シンボルを回転させたいのですが、うまくいきません。

    はじめまして。Flash初心者です。 Flashを使ったものをWEBサイトに取り入れたいと思いまして、 ネットでモデルとなるものを探してました。 その結果、 http://flashrave.org/as/rotation/index.html のサイトのものを作ってみたいのですが、エラーがでてしまします。 私の最終的にした事。 1,回転させたい画像を、イラストレーターに読み込み、swfで保存する。 2,Flashを開きライブラリから新規シンボルを作成。ムービークリップを選択し、ソースから1で使用したhtmlファイルを読み込んでみる。(読み込まないも試してみる) シンボルの画面から、ファイル→読み込みでswfファイルを読み込む。 画像がでる。 3,シーン1にシンボルが表示される。それを選択して サイトにあった onClipEvent (enterFrame) {  this._rotation += 1; } このソースをアクションに貼付ける。 4,保存して、動かしてみる。 5,すると以下のようなエラーが出力される **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 2:シンタックスエラー  this._rotation += 1; **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 3:予期しない '}' があります。 } ActionScript エラー数 :2 報告済みエラー :2 以上です。初心者なので単純なミスかもしれません。Flash8を使っています。 どなたかご教授宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 時計問題

    「短針(時針)は長針(分針)の動きにともない連続的に動き、長針は秒針の動きにともない連続的に動く12時間制の時計がある。この時計において3つの針の角度が完全に一致するのは、0時0分0秒(12時0分0秒)のときのみであることを証明せよ。」 お願いします。