プロが教えるわが家の防犯対策術!

Flash初心者です。

Flashで実現したいことがあるのですが方法がありましたら教えて下さい。

1年間に何十個かのイベントがあったとして、そのイベントの申込期間中だけそのイベントの申込期間であるという告知を表示しておきたいのです。

そのイベントの申込期間になるたびに
更新するのは大変なのでイベントのデータをあらかじめ全て入力しておいて自動で切り替わるようにできませんでしょうか?

いろいろサイトも探してみたのですが
見当たりませんでした。

よろしくお願いします。

A 回答 (1件)

1つの形しか提示できませんが,実際は色んな形が考えられます。


発展や応用は色々と考えてみてください。


新規ドキュメント作成で,
ステージ上に "ダイナミックテキスト" のテキストフィールド を用意します。
文字の色は黒などステージの背景色以外の色にして,
たくさん文字が入るように少し横長にしておいてください。

そして,そのダイナミックテキストを選択した状態で,
下のプロパティインスペクタを表示させて,"インスタンス名" を付けます。
この説明では,「eventName」 というインスタンス名を付けたとしておきます。

そして,
新規でレイヤーを追加して,2レイヤーにします。

 □ レイヤー 筆・・|○| ←新規で作ったレイヤー
 □ レイヤー 筆・・|●| ←「eventName」がある

その新規で作ったレイヤーを ActionScript 専用レイヤーと頭の中で決めておいて,
そのレイヤーのフレーム1を選択し,
下のアクションパネルを表示させて,
そのアクションパネルに次のようなスクリプトを書きます(コピペ可能)。

------------------------------------
// イベントデータ配列 eventArr を作成
var eventArr = new Array();
//
// イベント日とイベント名を用意(2次元配列※可変)
eventArr.push(["2007/6/19", "雨まつり"]);
eventArr.push(["2007/6/20", "雨まつり"]);
eventArr.push(["2007/6/21", "雨まつり"]);
eventArr.push(["2007/6/22", "雨まつり"]);
eventArr.push(["2007/7/15", "海で遊ぼう"]);
eventArr.push(["2007/7/16", "海で遊ぼう"]);
eventArr.push(["2007/7/17", "海で遊ぼう"]);
eventArr.push(["2007/8/13", "盆まつり"]);
eventArr.push(["2007/8/14", "盆まつり"]);
eventArr.push(["2007/8/15", "盆まつり"]);
eventArr.push(["2007/8/16", "盆まつり"]);
// 定形文字列 finite の設定(※可変)
var finite = " 申し込み期間中です!";
//
// 変数 eventLen に配列の要素数を取得
var eventLen = eventArr.length;
// ☆ちょっと検証(本番は不要)
trace("イベント数="+eventLen);
//
// 今の時刻オブジェクトを作成
var nowDat = new Date();
// 年の取得
var now_y = nowDat.getFullYear();
// 月の取得
var now_m = nowDat.getMonth()+1;
// 日の取得
now_d = nowDat.getDate();
// 今日の日付文字列を作成
var today = now_y+"/"+now_m+"/"+now_d;
// ☆ちょっと検証(本番は不要)
trace("今日="+today);
//
// テキストフィールド eventName に表示の初期化
eventName.text = "";
//
// イベント数の回数ループ
for (var i = 0; i<eventLen; i++) {
// eventArrの0番要素と today の文字列が等しいとき
if (eventArr[i][0] == today) {
// その 1番要素を テキストフィールド eventName に表示
eventName.text = eventArr[i][1]+finite;
}
}
------------------------------------


そして,
「制御」→「ムービープレビュー」してもらうと,
できたものや, trace 関数で出力される確認用データなどが表示されると思います。

Flash の時刻(日付)取得は,ローカルPCの時刻(日付)です。
パソコンの日付を変更すると,Flash で取得する時刻(日付)も変わるので,
色んな日でちゃんとデータが表示されるかどうか実験できます。

2次元配列のデータも同じ形で違う内容に変えてもらうと,データも自作可能です。
数も自由です。



//////////////////////////////////////////////////////
~ その他補足 ~

◎ getMonth について

getMonth() で得られる月は,0月から始まります。
日本人の方がデータを作成しやすいように,
var now_m = nowDat.getMonth()+1;
でわざと 1 を加算して取得しています。


◎ 配列について

配列の要素(エレメント)番号も0番から始まります。
上の場合例えば,
eventArr[0][0] は "2007/6/19" です。
eventArr[0][1] は "雨まつり" です。
eventArr[4][0] は "2007/7/15" です。
eventArr[4][1] は "海で遊ぼう" です。
順次そういう感じで認識してもらうとプログラムやデータが理解できると思います。

配列を使わずに,普通の変数群を大量に用意してもかまいませんが,
配列にした方が .length で要素数が取得できたり,
[日付,イベント名] のようにデータをペアで扱えるので使い勝手が良いため配列でデータを用意しています。

2次元配列は,簡単に言うと Flash 内に Excel の表を用意したようなものです。
Excel など表計算ソフトはデータを2次元平面に表すソフトですよね。
Excel で,あるシートに,

    A列     B列
1 2007/6/19 雨まつり
2 2007/6/20 雨まつり
3 2007/6/21 雨まつり
4 2007/6/22 雨まつり
5 2007/7/15 海で遊ぼう
6 2007/7/16 海で遊ぼう
7 2007/7/17 海で遊ぼう
8 2007/8/13 盆まつり
9 2007/8/14 盆まつり
10 2007/8/15 盆まつり
11 2007/8/16 盆まつり

というデータを用意しておいて,

------------------------------------
Sub ShowEvent()

' 定形文字列 finite の設定(※可変)
finite = " 申し込み期間中です!"

' 変数 eventLen にアクティブシートA列の最終行数を取得
eventLen = ActiveSheet.Range("A65536").End(xlUp).Row
' ☆ちょっと検証(本番は不要)
MsgBox ("イベント数=" & eventLen)

' 今日の日付を取得
today = Date
' ☆ちょっと検証(本番は不要)
MsgBox ("今日=" & today)

' C列の1行を空白に
ActiveSheet.Cells(1, 3) = ""

' イベント数の回数ループ
For i = 1 To eventLen
' A列のi行 と today が等しいとき
If ActiveSheet.Cells(i, 1) = today Then
' C列の1行 に B列のi行 の値を代入
ActiveSheet.Cells(1, 3) = ActiveSheet.Cells(i, 2) & finite
End If
Next i

End Sub
------------------------------------

というマクロを実行させているのと同じようなことです。
言語や仕様や外観が違うだけで,やっていることはほとんど同じですね。

また,上の例では使っていませんが,
データが表形式なので,ソートや削除(上にシフト)などなども簡単になります。
って,Excel を持ち出した方がややこしかったでしょうか...?


◎ その他応用

上ではテキストのデータを変えているだけですが,
シンボルとしてイベントごとのムービークリップを用意しておいて,
ある日付になるとその日付用のムービークリップを attachMovie() する方法なども考えられます。

「リンケージとは?」
http://www.1art.jp/flash2/chapter/33/33.htm


また,「NowLoading...」さえ付ければ,
日付に応じてメインムービー(_root)や,ムービークリップのフレーム移動(gotoAndStop())も可能です。

とにかく,
同じ原理で無数に色々なことはできますから,
色々考えてみてください。
 
    • good
    • 0
この回答へのお礼

ありがとうございます!!
無事できました。
スクリプトをじっくり一つ一つ見てみてるとなるほどって感じでした。
いろいろ研究してみます。

お礼日時:2007/06/22 20:44

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