電子書籍の厳選無料作品が豊富!

Flash lite1.1で、
デジタル時計(HH:MM)のついた待受けを作りたいと思っています。

仕様としては背景で5枚の画像を1分ごとにループさせて、
画像ごとにデジタル時計を表示させる位置を変えたいと思っています。
(1枚目の画像の時はセンターに、2枚目の画像の時は下部に、という感じ)

現在、下記のような方法で書こうと思って作り始めたのですが
躓いてしまいましたので宜しければご助言をお願いいたします。


まず時計部分については、
ステージ直下に空のMC「myTime」を作って
表示用のレイヤーにダイナミックテキストを配置し、
変数 v_time をセットしました。

で、action用レイヤーに
----------
1フレーム
----------
call("func");
gotoAndPlay(2);

----------
2フレーム
----------
call("func");

----------
3フレーム
----------
gotoAndPlay(2);

----------
4フレーム
----------
●ラベル「func」
nowHour = fscommand2("GetTimeHours");
nowMin = fscommand2("GetTimeMinutes");

//10未満なら頭に0をつける
if (v_hour<10) {
v_hour = "0" add v_hour;
}
if (v_minutes<10) {
v_minutes = "0" add v_minutes;

v_time = nowHour add ":" add nowMin;


と、書きました。
これで時計の表示だけはうまくいきました。


これとは別に、ステージ直下に画像表示用のムービークリップ
「myImage」を作り、1~5フレームに各画像を配置しました。

…と、ここまで自力で調べながらやってみたのですが
この先がわからず困っています。


イメージとしては
・nowMin の値から myImage のフレーム位置を移動
また同様に
・nowMin の値から myTime のx,y座標を変更

という感じかな?と思っているのですが、
どのように書けばよいでしょうか?
また、他に効率の良いやり方がありましたらご教授頂けませんでしょうか?

宜しくお願いいたします。

A 回答 (1件)

とりあえずすることは


「すでに作成済みの時計のことは忘れること」でしょうね。

作成済みの時計のことは忘れて
「5枚の画像を1分ごとにループさせる」のみを単独で考えるべきです。
(もし余裕があって,作成済みの時計のエンジンとどうしても結合したいという気になれば,そのときに結合すれば良いと思います。)
(「二兎を追う者は一兎を得ず」 です。)

というわけで
以下,時計は忘却!



=================

5枚の画像は背景なのですから
ステージ直下の一番下の方のレイヤーにムービークリップを作成して
そのムービークリップ内の フレーム1~5 にそれぞれ1枚ずつ5枚の画像を配置しているわけですよね?

そして,例えば携帯を開いたときは
→ムービークリップ内の フレーム1 を表示
その次の分→ムービークリップ内 フレーム2 を表示
その次の分→ムービークリップ内 フレーム3 を表示
その次の分→ムービークリップ内 フレーム4 を表示
その次の分→ムービークリップ内 フレーム5 を表示
その次の分→ムービークリップ内 フレーム1 を表示
その次の分→ムービークリップ内 フレーム2 を表示
 ~続く~
というような感じにするわけですよね?


その場合
その背景の「5枚の画像入りムービークリップ」に
例えば「bg_mc」というインスタンス名を付けます。

それとは別に,
ステージ直下に空のムービークリップを作成します。
その空のムービークリップ内を3フレームにして
各フレームを空白キーフレームに変換します。

そして
その空のムービークリップ内のフレーム1には次のように書きます。

//----------------------------
//親階層の「bg_mc」に命令
tellTarget("../bg_mc"){
//再生停止
stop();
}

//変数minに分を保存
min = fscommand2("GetTimeMinutes");
//----------------------------


さらに
その空のムービークリップ内のフレーム2には次のように書きます。

//----------------------------
//もし今の分と過去に保存したminの値が違えば
if (min<>fscommand2("GetTimeMinutes")) {
//
//親階層の「bg_mc」の再生フレームが最終フレーム未満であれば
if (../bg_mc:_currentframe<../bg_mc:_totalframes) {
//親階層の「bg_mc」に命令
tellTarget ("../bg_mc") {
//次のフレームで停止
nextFrame();
}
//
//親階層の「bg_mc」の再生フレームが最終フレームに達していれば
} else {
//親階層の「bg_mc」に命令
tellTarget ("../bg_mc") {
//フレーム1に戻って停止
gotoAndStop(1);
}
}
}

//変数minに分を保存
min = fscommand2("GetTimeMinutes");
//----------------------------


さらに
その空のムービークリップ内のフレーム3には次のように書きます。

//----------------------------
//このムービークリップ内をフレーム2に戻して再生
gotoAndPlay(2);
//----------------------------


以上のような感じでできると思います。


なお フレーム1 の最初ですが,

//親階層の「bg_mc」に命令
tellTarget("../bg_mc"){
//再生停止
stop();
}

こう↑ではなくて
こんな感じ↓にしても良いと思います。

//親階層の「bg_mc」に命令
tellTarget("../bg_mc"){
//ランダムなフレームで再生停止
gotoAndStop(random(_totalframes)+1);
}



全般的には
スラッシュシンタックスによる特殊なターゲットパスの表記のしかたと
くせのある tellTarget() 関数で他ムービークリップに命令することに慣れるのがポイントですかね。

それらに慣れれば
階層などムービーの構造も変更可能になりますから
色々自由にできるようになると思います。
「Flash lite 1.1で待受け作成」の回答画像1
    • good
    • 0
この回答へのお礼

的確なアドバイスを頂いて視界が開けた気がします。
ありがとうございます!

当方ASは3.0から入った人間なのでモバイル特有の考え方が全く身についていませんでした。
ご回答を参考に精進しようと思います。
この度は大変助かりました。

お礼日時:2011/07/15 01:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!