FC2ブログ

音携闊歩

音楽をより楽しむための個人的見解。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-) |
FlashLite1.1はアイディア次第で、いろいろなものが作れます!!何か面白いアイディア浮かばないかなぁ…浮かばない。なんでアナログ時計でも作ってみることにしました。デジタル時計ができる人なら、間違いなく簡単にできるでしょう。
アナログ時計は時分秒をそれぞれ取得する方法を使います。今までの時計作成シリーズでは「FScommand("GetLocalTime", "time")」として、変数「time」に時分秒を格納していましたが、アナログ時計は短針と長針の角度を計算しないといけないので、それぞれを取得した方が簡単なのです(もちろん「GetLocalTime」+「substring」でできますが)。

■Flash待受作成(アナログ時計作成)
使用したソフト:
Macromedia FlashMXPro2004(ver.7.2)

初期設定:
・画面サイズを240*320にします(テンプレートを使用しても可)
・パブリッシュ設定をFlashLite1.1にします。

①アナログ時計用背景を用意します。時計の中心が分かるように目印を付けておきます(パブリッシュ前に削除)。

②メインフレームにデジタル時計表示用のダイナミックテキストと、年月日表示用のダイナミックテキストを用意します。変数は以下のように設定します。
時:hr
分:min
秒:sec
年:y
月:m
日:d
曜日:w

③短針と長針(画像/ベクター)を用意し、それぞれをMovieClip(以下MC)にして、インスタンス名を「hour」と「minute」とします。このとき各MCの基準点が回転する中心にくるようにします。

④次はスクリプトを書いていきます。
・メイン1フレーム目アクション
//時の取得
hr = fscommand2("GetTimeHours");
//分の取得
min = fscommand2("GetTimeMinutes");
//秒の取得
sec = fscommand2("GetTimeSeconds");
//年の取得
y = fscommand2("GetDateYear");
//月の取得
m = fscommand2("GetDateMonth");
//日の取得
d = fscommand2("GetDateDay");
//曜日の取得
w = fscommand2("GetDateWeekday");
//曜日の表示文字
switch (w) {
case 0 :
w = "sun";
break;
case 1 :
w = "mon";
break;
case 2 :
w = "tue";
break;
case 3 :
w = "wed";
break;
case 4 :
w = "thu";
break;
case 5 :
w = "fri";
break;
case 6 :
w = "sat";
break;
}
//アナログ時計の表示
hour._rotation = hr*30+min*0.5;
minute._rotation = min*6;
//桁の追加
if (hr<=9 and hr>=0) {
hr = 0 add hr;
}
if (min<=9 and min>=0) {
min = 0 add min;
}
if (sec<=9 and sec>=0) {
sec = 0 add sec;
}
※時分秒をそれぞれ取得します。角度は「60分=360度」なので「1分=6度」、また「24時間=360度」なので「1時間=30度」、さらに短針は長針が1周(360度)すると30度動くので、30÷360=0.5となっています。また「GetTimeHours/Minutes/Seconds」は1桁の数字の場合、1桁しか変数を返さないので、0を追加します。

・メイン2フレーム目アクション
gotoAndPlay(1);
※1フレーム目に戻って時刻等の取得をループさせます。

⑤時間によって背景を変えるので、MC「back」を作成します。4枚の背景画像を使用したので、2/3/4/5フレームに画像を配置(1フレーム目は空白)します。時間による背景の切り替えについては、Flashケータイ⑤で詳しく解説していますので、そちらを参照してください。今回は6:00~10:59、11:00~15:59、16:00~18:59、19:00~5:59の4つに分けて背景を変えています。
・MC「back」1フレーム目アクション
stop();
m = fscommand2("GetTimeHours");
if (6<=m and m<=10) {
gotoAndPlay(2);
break;
} else if (11<=m and m<=15) {
gotoAndPlay(3);
break;
} else if (16<=m and m<=18) {
gotoAndPlay(4);
break;
} else {
gotoAndPlay(5);
break;
}
このアクションを2~5フレーム目にそれぞれ記述(コピー)します。

⑥次はランダムに発生するイベントを作ります。MC「rnd」を作成します。イベントにもよりますが、長いアニメーションを作る場合は、ラベルを作成しておくとアニメーション変更時に作業がとても楽になります。
発生するイベントの確率を「1/30秒」に設定します。こちらは任意で変更してください。
・MC「rnd」2フレーム目アクション
//ランダムな整数の発生
rnd = Math.floor(Math.random()*180);
//処理
if (rnd==0) {
gotoAndPlay("event01");
} else if (rnd==1) {
gotoAndPlay("event02");
} else {
gotoAndPlay(1);
}

1フレーム目を空白(何も表示せず1と2をループさせる)にして、2フレーム目にランダム発生用スクリプト、3フレーム目以降にイベント表示用アニメーションを挿入しています。このファイルではラベル「event01」と「event02」を作成しています。発生確率を変更する場合は、「rnd = Math.floor(Math.random()*180);」の「180」を変更してください。大きくすると確率は下がります。今回はフレームレートが12fpsで作成していますので、「rnd」は1秒間に6つ生成されることになりますので、180倍すると「1/30秒」になる計算になります。

⑦書出し(パブリッシュ)→SD転送

これで完成です。今回は「GetTimeHours/Minutes/Seconds」を使用したので、PCでの確認が可能です(スタンドアローンではFScommandを認識しないため不可)。新しく取り入れたのは「アナログ時計」と「ランダム処理」だけなので、それ以外での説明不足は過去の「Flashケータイ」を参照してください。
結構骨の折れる内容でしたが、納得いくものが作れたので満足☆素敵なアイディアありがとさんでした。

>>Sample Data 72kb(swf)
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。