• ベストアンサー

Flashでのゲーム用アナログ時計作成

よろしくお願いします。 現在FLASHでゲームを作成中です。 そこで、ゲームには時間制限があり、 それをアナログ時計で表現したいと考えています。 長針(mc名:cyousin)と短針(mc名:tansin)があり、初めは午前4時を指し、 「現実の5秒ごとに一時間進む」ように作るには、 どのようにASを記述すればよいでしょうか? 他のホームページでアナログ時計のサンプルはあるのですが、 普通に1秒づつ進んでいくので参考にならず…。 ご回答よろしくお願いします。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

#2 です。 動かせる 「○」 は変形点です。 変形点はFlashオーサリングツール上の FLAファイル にしか存在しない編集上の中心点です。 基準点の 「+」 は SWF 上で存在する ActionScript 用の中心点で, Adobe(Macromedia) Flash の場合, シンボルに変換した以降は動かすことができません。 (別のFlash作成ソフトであれば動かせるものもあります。) Adobe(Macromedia) Flash の場合は, 基準点の 「+」 を動かすのではなくて, ムービークリップなどシンボルの中身を動かします【図】↓。

その他の回答 (2)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

バージョンが抜けていますが,これは  質問番号:5233828  「Flashでの座標指定におけるボタン有効化」  FLASH CS4 の AS 2.0 と同じと考えて良いですよね。 > 初めは午前4時を指し、 > 「現実の5秒ごとに一時間進む」ように作る 大まかには onEnterFrame または onClipEvent(enterFrame) で, getTimer から得られた値から _rotation を算出させれば良いと思います。 長針(cyousin)と短針(tansin)が存在するタイムラインのフレームに記入するスクリプト例。 ------------------------------------------------------ // 短針の最初の角度を設定 var tan_r:Number = 120; // 短針を最初の角度にする tansin._rotation = tan_r; // 今(今がいつかは知らない 場合によって変わる)の時間(ミリ秒)を取得 var now0:Number = getTimer(); // 1フレーム進む時間毎に毎回実行する関数を定義 this.onEnterFrame = function():Void { // 1フレーム進む時間毎に時間(ミリ秒)を取得 var now1:Number = getTimer(); // 長針を回転 cyousin._rotation = 360*(now1-now0)/5000; // 短針を回転 tansin._rotation = tan_r+360/12*(now1-now0)/5000; }; ------------------------------------------------------

pompom27
質問者

補足

教えていただきありがとうございます。 おっしゃるとおり、バージョンはCS4でAS2.0です。 ご回答頂いた方法で回転させることができたのですが、回転の基準点がおかしいのか、時計のように回ってくれません。 自由変形から○の部分を針の下部に移動すればそれを軸に回ってくれると思ったのですが、どうしても針の真ん中を中心に回ってしまいます。 回転の基準点を変更するにはどうしたら良いでしょうか? すみませんが、教えてください。よろしくお願いします。

noname#110296
noname#110296
回答No.1

当方あまり詳しくないです。 本当にただ5秒に1回転するだけのものですが、作ってみました。 まず、最初に時間をセットするのは簡単です。 開始したい時間を30でかければ回転角度が出ます。 開始したい分を6でかければ回転角度が出ます。 これをロード時に実行するだけです。 そこから回転する仕組みは フレームレート(1秒間に表示されるフレームの数、以下fpsと書きます)と一周させたい秒数から、長針の1フレームあたりの回転角度を算出、それを加算(短針はその12分の1を加算)するというものです。 5秒で長針を一周させたい場合、長針の1フレームあたりの回転角度は「360 / (fps * 5)」 長針の12周(12時間)=短針の1週(12時間)なので、短針の1フレームあたりの回転角度は、長針の回転角度を12で割ったものです。 あとは、_rootに長針と短針のムービークリップ(ここではchosin,tansin)を配置して、フレームにASを記述してまとめて操作します。 (動作の上で最重要なのは、フレームレートと変数fpsの数値を一緒にすることです。) //ここから------------------------------------------------- //設定 sh = 4;//開始時 sm = 0;//開始分 fps = 30;//フレームレート h = 5;//一時間(長針の一周)をリアルタイムの何秒にするか //設定不要 rota = 360 / (fps * h);//長針の1フレームあたりの回転角度を算出 onLoad = function(){ //読み込み完了と同時に設定した時間に長針と短針をセット tansin._rotation = sh*30;//12時間で360度、360/12=30 chosin._rotation = sm*6;//同じく360/60=6 } onEnterFrame = function(){ chosin._rotation += rota;//長針を1フレームあたりの角度だけ回転させる tansin._rotation += (rota/12);//長針の12回転=短針の1回転なので回転量は12分の1 }