• 締切済み

複数の外部swfを1週間ごとに自動で入れ替えたい

index.htmlにtop.swfを貼り付けています。 top.swf内loadMovieエリアに、 a.swf~h.swfの8つの外部swfを読み込みたいのですが、 一週間ごとに差し変わるasは、どういう記述をすればよいでしょうか? (つまり2ヶ月ですべて一周するというものです) ちなみにindex.htmlと、全swfは同じ階層です。 よきアドバイスをお願いいたします。

みんなの回答

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

> top.swf内loadMovieエリアに、 loadMovie という言葉を使われていらっしゃるということは, ActionScript2.0 以下ですよね。 Date クラスの getTime() メソッドで, 1970年1月1日0時 (世界時) からのミリ秒数が取得できます。 大筋としては, これで得られる値を     1 週間   = 7 日   = 7×24 時間   = 7×24×60 分   = 7×24×60×60 秒   = 7×24×60×60×1000 ミリ秒 で割れば 経過週数 が出ます。 その 経過週数 が8の倍数である場合,例えば「0.swf」をロード。 その 経過週数 が8の倍数+1である場合,例えば「1.swf」をロード。 その 経過週数 が8の倍数+2である場合,例えば「2.swf」をロード。   …  … その 経過週数 が8の倍数+7である場合,例えば「7.swf」をロード。 などとすれば良いのではないかと思います。 以上は大筋です。 その他細かい補正は加わります。 例えば,1970年1月1日は木曜日です。 週の開始を日曜日とする場合は,4日分のミリ秒を足すとか, 世界時を日本時にするとか,細かい補正は必要だと思います。 「top.swf」を貼り付けた「index.html」と同じフォルダに 「0.swf」「1.swf」「2.swf」…「7.swf」があったとします。 また, 「top.swf」の_rootのステージ上にムービークリップ仮称「loadMC」を配置した場合に _rootのフレームに書くスクリプト例です↓。 --------------------------------------------- // Dateクラスのインスタンス myDate を作成 myDate = new Date(); // 1970年1月1日0時 (世界時) からのミリ秒数を取得 mSec = myDate.getTime(); // 取得したミリ秒数を補正(4日と9時間を加算) mSec += 4*24*60*60*1000+9*60*60*1000; // 経過週数を求める myWeek = Math.floor(mSec/(7*24*60*60*1000)); // 経過週数を8で割った余りを求める modWeek = myWeek%8; // ムービークリップ仮称「loadMC」に「余り数.swf」をロード loadMC.loadMovie(modWeek+".swf"); --------------------------------------------- 上記スクリプトを使用した場合, 各期間で次のようなSWFがロードされます。 2009年11月29日(日)0時~2009年12月5日(土)24時 … 「3.swf」 2009年12月6日(日)0時~2009年12月12日(土)24時 … 「4.swf」 2009年12月13日(日)0時~2009年12月19日(土)24時 … 「5.swf」 2009年12月20日(日)0時~2009年12月26日(土)24時 … 「6.swf」 2009年12月27日(日)0時~2010年1月2日(土)24時 … 「7.swf」 2009年1月3日(日)0時~2010年1月9日(土)24時 … 「0.swf」 2009年1月10日(日)0時~2010年1月16日(土)24時 … 「1.swf」 2009年1月17日(日)0時~2010年1月23日(土)24時 … 「2.swf」       …    …    … Math.floor(○○) は ○○ の小数点以下を切り捨てて整数を取得できます。 Math.floor(5.0) は 5 です。 Math.floor(5.1) も 5 です。 Math.floor(5.99) も 5 です。 「%」は剰余演算子です。割った余りを取得できます。 例えば A = 10%8 では,余りは 2 ですから A に 2 が代入されます。 A = 16%8 では,余りは なし ですから A に 0 が代入されます。 ですから, modWeek = myWeek%8; は「8週単位で数えて何週余るか」を取得しています。 その結果  8週単位で数えて0週余る…「0.swf」をロード  8週単位で数えて1週余る…「1.swf」をロード  8週単位で数えて2週余る…「2.swf」をロード      …           …  8週単位で数えて7週余る…「7.swf」をロード ということをすることになります。 === === === > a.swf~h.swfの8つの外部swfを読み込みたいのですが、 もし「0.swf」~「7.swf」という数字で不都合な場合は, 配列にでも「a」~「h」などの名前データを入れておけば良いでしょう。 配列に入れておけば長い if文 や switch文 の使用を回避できます。 --------------------------------------------- // 名前を入れた配列を作成 nameArr = ["a", "b", "c", "d", "e", "f", "g", "h"]; // Dateクラスのインスタンス myDate を作成 myDate = new Date(); // 1970年1月1日0時 (世界時) からのミリ秒数を取得 mSec = myDate.getTime(); // 取得したミリ秒数を補正(4日と9時間を加算) mSec += 4*24*60*60*1000+9*60*60*1000; // 経過週数を求める myWeek = Math.floor(mSec/(7*24*60*60*1000)); // 経過週数を8で割った余りを求める modWeek = myWeek%8; // ムービークリップ「仮称:loadMC」に「○.swf」をロード loadMC.loadMovie(nameArr[modWeek]+".swf"); --------------------------------------------- 上記スクリプトを使用した場合, 各期間で次のようなSWFがロードされます。 2009年11月29日(日)0時~2009年12月5日(土)24時 … 「d.swf」 2009年12月6日(日)0時~2009年12月12日(土)24時 … 「e.swf」 2009年12月13日(日)0時~2009年12月19日(土)24時 … 「f.swf」 2009年12月20日(日)0時~2009年12月26日(土)24時 … 「g.swf」 2009年12月27日(日)0時~2010年1月2日(土)24時 … 「h.swf」 2009年1月3日(日)0時~2010年1月9日(土)24時 … 「a.swf」 2009年1月10日(日)0時~2010年1月16日(土)24時 … 「b.swf」 2009年1月17日(日)0時~2010年1月23日(土)24時 … 「c.swf」       …    …    … ◎以上のことをするのに必要なバージョン  ActionScript1.0 (2.0設定でも良い 3.0設定はダメ)  Flash 5 以上で作成可  (Flash 5以上 = Flash 5,MX,MX2004,8,CS3,CS4)  Flash Player 5 以上で閲覧可

bit77
質問者

お礼

ご連絡が遅くなりました。 別件で手が空かず、途中まで試したところで止まっていますが、 問題なさそうです! ありがとうございました。

関連するQ&A