• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Flash Lite1.1待受時計の年の取得)

Flash Lite1.1待受時計の年の取得

このQ&Aのポイント
  • Flash Lite1.1で携帯用の待受け時計を作成中なのですが、年の取得で行き詰まっています。
  • スクリプトを参考にして秒、月、日の取得は問題なくできましたが、年の取得ができません。
  • 助言がある方はいらっしゃいますか?お願いします。

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

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

#1&2 です。 めちゃくちゃ間違いではないですが無駄(負担)が多いでしょう。 人間にとっても,またPCや携帯にとっても。 ところで #2 で書いた内容はわかりましたか?  ムービークリップ内の,  フレーム1 には 0 の画像  フレーム2 には 1 の画像  フレーム3 には 2 の画像    …略…  フレーム10 には 9 の画像  というように用意をしていれば  「得られた数+1」フレームに  gotoAndStop すれば良いだけ。 ということですよ。 三項演算子(if文でも同じく)を使うから 人間にとってもややこしくて PC(携帯)にとっても処理に負担がかかるのです。  「得られた数+1」フレームに  gotoAndStop すれば良いだけ。 これを substring を使うならこのようにすれば良いということです↓。 year = fscommand2("GetDateYear"); year1 = substring(year, 4, 1); year2 = substring(year, 3, 1); year3 = substring(year, 2, 1); year4 = substring(year, 1, 1); trace("year1→gotoAndStop(" add (year1 +1) add ")"); trace("year2→gotoAndStop(" add (year2 +1) add ")"); trace("year3→gotoAndStop(" add (year3 +1) add ")"); trace("year4→gotoAndStop(" add (year4 +1) add ")"); 元に近い形で 同じことをするなら次のようになります↓ year = fscommand2("GetDateYear"); year4 = int(year/1000); year3 = int((year-year4*1000)/100); year2 = int((year-year4*1000-year3*100)/10); year1 = year-year4*1000-year3*100-year2*10; trace("year1→gotoAndStop(" add (year1 +1) add ")"); trace("year2→gotoAndStop(" add (year2 +1) add ")"); trace("year3→gotoAndStop(" add (year3 +1) add ")"); trace("year4→gotoAndStop(" add (year4 +1) add ")"); さらに 三項演算子(if文でも同じく)を使うなら もっと複雑で人間にとってもPCや携帯にとっても負担が増えるのはわかりきったことです。 上記の2つの方法のどちらでするにしても 処理は一瞬で終わりますから どちらが処理が早いかはわかりません。 負荷として 1000 回 同じことをして その処理時間を比べてみることにします。 上の例の変形↓ time = getTimer(); for (i=1; i<=1000; i++) { year = fscommand2("GetDateYear"); year1 = substring(year, 4, 1); year2 = substring(year, 3, 1); year3 = substring(year, 2, 1); year4 = substring(year, 1, 1); } trace(getTimer()-time); trace("year1→gotoAndStop(" add (year1+1) add ")"); trace("year2→gotoAndStop(" add (year2+1) add ")"); trace("year3→gotoAndStop(" add (year3+1) add ")"); trace("year4→gotoAndStop(" add (year4+1) add ")"); ↑私のPCの場合,16ミリ秒かかりました。 下の例の変形↓ time = getTimer(); for (i=1; i<=1000; i++) { year = fscommand2("GetDateYear"); year4 = int(year/1000); year3 = int((year-year4*1000)/100); year2 = int((year-year4*1000-year3*100)/10); year1 = year-year4*1000-year3*100-year2*10; } trace(getTimer()-time); trace("year1→gotoAndStop(" add (year1 +1) add ")"); trace("year2→gotoAndStop(" add (year2 +1) add ")"); trace("year3→gotoAndStop(" add (year3 +1) add ")"); trace("year4→gotoAndStop(" add (year4 +1) add ")"); ↑私のPCの場合,32ミリ秒かかりました。 substringを使う方が, 速さも倍くらいになるようです。 この場合, 人間にとってもPCや携帯にとっても substring を使うのが負担が軽いということになるでしょう。

noname#158971
質問者

お礼

ご回答いただきまして本当にありがとうございます!!! > ところで #2 で書いた内容はわかりましたか? はい^^ ムービークリップ内のフレーム1 には 0 の画像、フレーム2 には 1 の画像~~、、、ということは、取得した年月日を、それぞれ代入している変数にプラス1して、数字mc内にある目的のフレームに止まるように指示してやれば良い、ということですよね*^-^* そして、、、 やはり、私が今回使おうとしていたスクリプトは 負荷が大きいものだったのですね(>_<) それと私が今回質問に使用させていただいたスクリプトの中の 【 ?: 】 は、条件演算子(三項演算)というのですね(>_<) 三項演算子というのが分からなかったので、検索で調べてみましたら、、、 三項演算子は、? 演算子を用いて評価する式を分岐させます。 これは、一行単体のif-else縮小版のようなものです。 とありました。 これで、BlurFiltanさまが前回お答えくださった内容に「if文」とか「三項演算子」が出てきた理由が分かりました。 最初、スクリプトの中に「if文」が入っていないのに、何で「if文」のことをおっしゃっているんだろう?と、意味が理解出来ず頭を悩ませていましたので、これでまた一つ勉強することが出来ました。 本当にありがとうございます! そしてそして(>_<)!、、、 2つのスクリプトの処理の速さを比べるテストまでしていただいて、 本当に本当にありがとうございます(TT▽TT)!!!! めちゃくちゃ分かりやすかったです!!! 私がこれから使おうと思っていたスクリプトよりも、 substringを使ったスクリプトの方が2倍も速いという事実にも、 めちゃくちゃ驚かされました(>_<)! この2つのスクリプトの処理速度を比べた場合、 PCだったら、処理速度の違いが16ミリ秒くらいなら、 どちらのスクリプトでも、そんなに大差ないかもですが、 実際にそのスクリプトを使用して処理を繰り返させるのが携帯となると、その小さな違いが結構大きなものとなってきますよね(>_<)! 思い切って質問させていただいて良かったです! 本当にめちゃくちゃ勉強になりました!!!!! asは奥が深くて、めちゃくちゃ難しくて、、、 いつも死ぬほど四苦八苦させられますが、 これからも頑張って精進して参りたいと思います^^ この度はご教示いただきまして、 本当に本当にありがとうございました!!!!!!m(_ _)m

その他の回答 (2)

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

#1です。 if文 だの 三項演算子 だのを使う部分が元から気にくわないのですが あえてその方法をとるのであれば次のようにすればできるでしょう。 //---例------------------------------- year = fscommand2("GetDateYear"); year3 = (substring(year, 2, 1) == 0) ? 10 : substring(year, 2, 1); trace(year3); //----------------------------------- 最初から ムービークリップ内の, フレーム1 には 0 の画像 フレーム2 には 1 の画像 フレーム3 には 2 の画像  …略… フレーム10 には 9 の画像 というように用意をしていれば 無駄な if文 だの 三項演算子 だのを使う必要はないのですが。。。

noname#158971
質問者

お礼

ご回答、誠にありがとうございます!!! お陰様で無事問題を解決する事が出来ました!!! BlurFiltanさまの回答には、いつも本当に助けていただいてます。 そして、とても参考になっています! 本当にありがとうございますm(_ _)m それで、BlurFiltanさまにご教示いただき、 無事、問題も解決したにも関わらず、質問させていただくのは 大変恐縮なのですが、 どうしても気になることがあったので、ご回答いただけましたら 幸いです。。。。 > 最初から > ムービークリップ内の, > フレーム1 には 0 の画像 > フレーム2 には 1 の画像 > フレーム3 には 2 の画像  …略… > フレーム10 には 9 の画像 > というように用意をしていれば > 無駄な if文 だの 三項演算子 だのを使う必要は~~ もしかしなくても、今回、私が質問に使用させて頂いたスクリプトは、 処理が重かったりなど、何かしら問題のあるスクリプトだったりするのでしょうか? 実は今までは、、、 ---------------------------------------------- 携帯Flashの作製方法 デジタル時計を作ろう2 URL : http://dr.shadowrin.com/flash/flashlite/flashlite_05.php ---------------------------------------------- ↑ のサイトを参考にさせていただき、 こちらで公開されているスクリプトを、ずっと愛用させていただいていたのですが、今回、質問に使ったスクリプトを最近になって発見しまして、今まで使用していたスクリプトよりも、今回、質問に使ったスクリプトの方が、全体的なスクリプトの量が少い感じなので、携帯への負荷も軽いのかな?、、、と単純に考え、次からは質問に使ったスクリプトに移行しようかと考えていたのです。 ですが、今回、BlurFiltanさまのご回答を経て、 その考えはもしかしなくてもめちゃくちゃ間違い??? と思うに至り、本当の所はどうなんだろう、、、と思ったので、 質問させていただきました。 まだまだ未熟で、全然そんな所まで行っておりませんが、 それでも出来るだけ、余計なものの入っていない、 ちゃんとしたスクリプトを組めるように、 日々精進で悪戦苦闘しております。 ので、 もしよろしければ、BlurFiltanさまからのご教示をいただけますと、 大変有難く思います。 どうぞよろしくお願い申し上げます。。。m(_ _)m

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

> 年の取得の、2桁 → 4桁への応用がどうしても出来ません。 意味がわかりません。 年は 元から 4桁 でしょう? ↓フレームにコピペで「制御」→「ムービープレビュー」 //--------------------------------- yyyy = fscommand2("GetDateYear"); trace(yyyy); //--------------------------------- →出力:2011 2桁→4桁 ではなくて 4桁→2桁 でしょうか? ↓フレームにコピペで「制御」→「ムービープレビュー」 //--------------------------------- yyyy = fscommand2("GetDateYear"); yy = substring(yyyy,3,2); trace(yy); //--------------------------------- それをさらに, 1桁ずつバラすのですか? ↓フレームにコピペで「制御」→「ムービープレビュー」 //---------------------------------- yyyy = fscommand2("GetDateYear"); y1 = substring(yyyy,3,1); y2 = substring(yyyy,4,1); trace("「" add y1 add "」" add " 「" add y2 add "」" ); //----------------------------------

noname#158971
質問者

補足

ご回答いただきまして誠にありがとうございます^^ あと、説明不足で意味不明になってしまってる件について、 本当に申し訳ありません(>_<)! > 年の取得の、2桁 → 4桁への応用~~ は、参考にさせていただいているスクリプトの 「時間」と「分」が2桁なので、 同じ2桁の「秒、月、日」への応用も簡単だったのですが、 年は4桁なので、このスクリプトをどう応用すれば良いか 行き詰ってしまった、、という意味だったのです。 1桁ずつにバラすのは、字間の調節や配置位置など、 デザインの面で色々と応用が利くからです。 一応、自分なりに色々と試してみた結果、、、 ------------------------------------------------- year = fscommand2("GetDateYear"); year1 = substring(year, 4, 1); year2 = substring(year, 3, 1); year3 = substring(year, 2, 1); year4 = substring(year, 1, 1); tellTarget ("year1") { gotoAndStop(/:year1); } tellTarget ("year2") { gotoAndStop(/:year2); } tellTarget ("year3") { gotoAndStop(/:year3); } tellTarget ("year4") { gotoAndStop(/:year4); } ------------------------------------------------- 上記スクリプトで、参考にさせていただいてるスクリプトに 応用出来たことは出来たのですが、 このスクリプトだと、数字が「0」になる(例えば今年なら 2011の3桁目の【2『0』11】)場合に、 数字が0で止まらず、数字mcのタイムランを延々繰り返す という状態になってしまいます。 (↑※1~0がノンストップでループする) ので、 ------------------------------------------------- //時 : 10の位 h2 = (h<10) ? (10) : (int(h/10)); //時 : 1の位 h1 = (h%10 == 0) ? (10) : (h%10); ------------------------------------------------- の部分を年に応用して、 1000の位、 100の位、 10の位、 1の位、 にしようとしているのですが、 何をどうすれば4桁に応用出来るのかがどうしても分からず、 とても困っています(>_<) もしよろしければご教示いただけますと大変助かります。 どうぞよろしくお願い申し上げます。。m(_ _)m

関連するQ&A

専門家に質問してみよう