Flash時計製作時に遭遇した問題と対応2

その2:針が逆方向を向く
Flash時計の第一号を作ったので、しばらく自分の携帯電話で試用していたら、針が逆方向を向くという現象が時々起こり始めました。
例えば、0秒の筈なのに秒針が30秒を指しているという具合です。
秒針は1日のうち1〜2回、長針は数日に1回位見かけるという頻度でした。(短針は1度も発生せず)
最初は角度の計算を間違えているのではないかと疑って、計算した角度の数値をテキストで表示させてみたのですが、角度の計算には問題ありませんでした。
そうなるとFlashプレーヤーの問題という可能性になりますが、どう対処すればわからなかったので、色々な方法を試し、最終的に下記の方法で針を動かすようにして問題が見られなくなりました。
長針の場合

  1. 現在時刻より、針の指すべき角度を計算する
  2. 現在の針のムービークリップの角度(_rotation)プロパティを獲得
  3. 現在の針の角度と針の指すべき角度の差を計算
  4. 針のムービークリップの角度を角度の差だけ加算する

実際に使っているアクションスクリプトの抜粋
長針の部分だけアクションスクリプトを抜粋したのが下記です。(chousin1というのは長針のインスタンス

deg_min = int( (minutes*6)+(seconds / 10) );
last_deg_min = int( (chousin1._rotation + 0.5 + 360) % 360 );
diff_min = ( ((deg_min - last_deg_min) + 360) % 360 );
if(diff_min != 0){
  if(diff_min > 91){
    chousin1._rotation += 90;
  } else {
    chousin1._rotation += diff_min;
  }
  chousin1._xscale=100;
  chousin1._yscale=100;
}

「if(diff_min > 91)」というのは、角度の差が91度より大きい場合、とりあえず90度づつ回すという処理をしたかったので、そのための条件分岐です。

ところで、秒針の場合は、もっとアホな対処で切り抜けたのですが、続きはまた今度書きます。