• 締切済み

Flashで日毎に違う数字を外部テキストで表示

初めて投稿させて頂きます。 FLASHで抽選くじのようなものを作ろうとしているのですが つまづいてしまいましたので、アドバイスを頂けたら幸いです。 内容は以下の通りです。 こちらの指定した電話番号の下4桁の数字で、当たりの出る抽選クジを作りたいと思っています。 『例)今日は、下4桁が1234の方に◯◯をプレゼント!』という感じです。 4桁の数字は日毎に変わるようにしたいです。(1、2週間分の数字をストックしておきたいです。) 更新しやすいように、4桁の数字は外部のテキストを読み込ませたいと思っております。 スタートボタンを押すと、パラパラと適当な乱数が表示された後にその日の4桁が表示される。といった方法にしたいと思っています。 説明が下手ですみません。 よろしくお願い致します。

みんなの回答

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

~~~ 回答 その2 ~~~ というわけで 回答 その1 の続きです。 用意するデータは 回答 その1 と同じで 次に Flash CS3 以上をお持ちで ActionScript 3.0 を使って Flash Player 9 以上用の SWF をパブリッシュする場合の フレームに書く(コピペする)スクリプト例を書きます↓。 //======================================= //今日の番号を入れる変数 num_str を宣言 var num_str:String; //今の Date オブジェクトを作成 var now_date:Date = new Date(); //1970年からの経過ミリ秒を取得(キャシュ参照防止用) var now_ms:Number = now_date.getTime(); //今の年を取得 var now_y:int = now_date.getFullYear(); //今の月(日本人用の月)を取得 var now_m:int = now_date.getMonth() + 1; //今の日を取得 var now_d:int = now_date.getDate(); //今の「年/月/日」の文字列を作成 var now_str:String = now_y + "/" + now_m + "/" + now_d; //(試しに出力) //trace(now_str); //テキストのリクエストを作成(キャシュ参照防止策無し) var req:URLRequest = new URLRequest("number.txt"); //テキストのリクエストを作成(キャシュ参照防止策入り) //var req:URLRequest = new URLRequest("number.txt?n=" + now_ms); //テキストロード用の URLLoader インスタンスを作成 var ld:URLLoader = new URLLoader(); //テキストロードが完了したときに関数 onLoadComp を実行 ld.addEventListener(Event.COMPLETE, onLoadComp); //関数 onLoadComp を定義 function onLoadComp(e:Event) { //このイベントリスナーの登録を削除 ld.removeEventListener(Event.COMPLETE, onLoadComp); //ロードしたデータの改行コードを \n に統一 var tmp_str:String = ld.data.split("\r\n").join("\n").split("\r").join("\n"); //2次元化したロードデータ入れる配列 var data_arr:Array = new Array(); //改行コードで分割して配列にする var tmp_arr = tmp_str.split("\n"); //配列 tmp_arr の要素数分ループ for (var i:int = 0; i<tmp_arr.length; i++) { //配列の要素を「,(カンマ)」で区切って2次元配列にする data_arr[i] = tmp_arr[i].split(","); } //(試しに最初のデータだけ出力) //trace(data_arr[0][0]); //trace(data_arr[0][1]); //2次元配列 data_arr の要素数分ループ for (i=0; i<data_arr.length; i++) { //data_arr[?][0] が 今の「年/月/日」 と同じであれば if (data_arr[i][0] == now_str) { //最初に用意した変数 num_str に data_arr[i][1] の値を代入 num_str = data_arr[i][1]; //関数 showNumber を実行 showNumber(); //この関数を抜ける return false; } } //最初に用意した変数 num_str に「該当番号無し」 を代入 num_str = "該当番号無し"; //関数 showNumber を実行 showNumber(); } //テキストのロード開始 ld.load(req); //--- 以下は私が勝手に作った状況 --- //テキストフィールド num_txt の宣言 var num_txt:TextField; //関数 showNumber の定義 function showNumber():void { //テキストフィールド num_txt を作成 num_txt = new TextField(); //num_txt を適当に設定 num_txt.x = 10; num_txt.y = 10; num_txt.width = 80; num_txt.height = 24; num_txt.background = true; num_txt.border = true; //num_txt をこのタイムラインに配置 addChild(num_txt); //num_txt に今日の番号を表示 num_txt.text = num_str; } //======================================= 同じくこれでムービープレビューやパブリッシュしてもらうと ステージ上に数字が表示されると思います。 回答 その1 のスクリプトには 次のような部分があります。 //テキストのロード開始(キャシュ参照防止策無し) lv.load("number.txt"); //テキストのロード開始(キャシュ参照防止策入り) //lv.load("number.txt?n=" + now_ms); 回答 その2 でそれに該当するのは次の部分です。 //テキストのリクエストを作成(キャシュ参照防止策無し) var req:URLRequest = new URLRequest("number.txt"); //テキストのリクエストを作成(キャシュ参照防止策入り) //var req:URLRequest = new URLRequest("number.txt?n=" + now_ms); 両者とも 1つ目のスクリプトだけを生かして 2つ目のスクリプトを // でコメントアウトしていますが, これは2つ目を生かすとムービープレビューではロードに失敗してエラーになるからです。 HTML と SWF とを同時にパブリッシュするなどして HTML を見ればエラーは起こらないと思います(もしくはアップするか)。 アップして使う場合は逆に 1つ目のスクリプトを // でコメントアウトして 2つ目のスクリプトだけを生かすようにした方が良いです。 外部データを Flash にロードするときには ブラウザのキャッシュ(一時ファイル)を読みに行ってしまうことが頻繁に起こります。 1週間に1度くらい更新するものでしたら キャシュ参照防止策を入れた方が良いです。   > 初めて投稿させて頂きます。 とのことですが, 回答を2つに分けてもこの程度の回答しかできないのです。 ですから 漠然としたものを丸投げ的に質問するのではなく なるべくもっと具体的なことを考えて もっとピンポイントで質問される方が良いと思います。

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

~~~ 回答 その1 ~~~ スクリプトだけでも文字数制限を超えるため回答を2つに分けます。 お持ちの Flash作成 ソフトとバージョンも, ActionScript のバージョンも, ターゲットとする Flash Player のバージョンも, とにかくバージョン関係を全く書かれていませんね。 これではまともな回答などほとんど不可能です。 バージョンを書かれていないため 以下では一応2パターンのバージョン用の回答を書きます。 2パターンのみですが字数制限を超えます。 またいわゆる「丸投げ(細部の詰めは他人任せ)」に近い部分もありますよね。 > スタートボタンを押すと、 > パラパラと適当な乱数が表示された後にその日の4桁が表示される。 これは具体的に どこにどのように表示させるのかがなどがわかりません。 また仮にこの内容が具体的にわかったとしても この部分を入れているとさらに文字数が増えるので この演出部分は勝手に無視させていただきます。   === === === === === 外部テキストデータは 「number.txt」というファイル名で Flash(SWF)ファイル や HTML と同じフォルダに置くものとします。 その「number.txt」の中身は 次のようなデータにすることにします。 2012/7/21,0123 2012/7/22,1234 2012/7/23,2345 2012/7/24,3456 2012/7/25,4567 2012/7/26,5678 2012/7/27,6789 データの形は 4桁年/月/日,4桁数字 これの改行区切りです。 数字は全て半角で 「/」は半角スラッシュ 「,」は半角カンマ(コンマ)です。 一応日付順にしていますが順番はどうでも良いです。 またデータ個数(行数)も1個以上あれば何個でも良いです。 ココに書いた上のデータをコピペした場合 ひょっとしたら行頭や行末にスペースが入るかもしれませんが スペースは一切ナシです。 また 2012/07/03,9876 のように月や日の1桁目に0を入れるのはダメです。 以上のようなものを用意したとして Flash MX 以上をお持ちで ActionScript 1.0 を使って Flash Player 6 以上用の SWF をパブリッシュする場合の フレームに書く(コピペする)スクリプト例を書きます↓。 //======================================= //今日の番号を入れる変数 num_str を宣言 var num_str; //今の Date オブジェクトを作成 var now_date = new Date(); //1970年からの経過ミリ秒を取得(キャシュ参照防止用) var now_ms = now_date.getTime(); //今の年を取得 var now_y = now_date.getFullYear(); //今の月(日本人用の月)を取得 var now_m = now_date.getMonth()+1; //今の日を取得 var now_d = now_date.getDate(); //今の「年/月/日」の文字列を作成 var now_str = now_y + "/" + now_m + "/" + now_d; //(試しに出力) //trace(now_str); //テキストロード用の LoadVars オブジェクトを作成 var lv = new LoadVars(); //テキストロードが完了したときの動作を定義 lv.onData = function(load_data) { //ロードしたデータの改行コードを \n に統一 var tmp_str = load_data.split("\r\n").join("\n").split("\r").join("\n"); //2次元化したロードデータ入れる配列 var data_arr = new Array(); //改行コードで分割して配列にする var tmp_arr = tmp_str.split("\n"); //配列 tmp_arr の要素数分ループ for (var i = 0; i<tmp_arr.length; i++) { //配列の要素を「,(カンマ)」で区切って2次元配列にする data_arr[i] = tmp_arr[i].split(","); } //(試しに最初のデータだけ出力) //trace(data_arr[0][0]); //trace(data_arr[0][1]); //2次元配列 data_arr の要素数分ループ for (i=0; i<data_arr.length; i++) { //data_arr[?][0] が 今の「年/月/日」 と同じであれば if (data_arr[i][0] == now_str) { //最初に用意した変数 num_str に data_arr[i][1] の値を代入 num_str = data_arr[i][1]; //関数 showNumber を実行 showNumber(); //この関数を抜ける return false; } } //最初に用意した変数 num_str に「該当番号無し」 を代入 num_str = "該当番号無し"; //関数 showNumber を実行 showNumber(); }; //テキストのロード開始(キャシュ参照防止策無し) lv.load("number.txt"); //テキストのロード開始(キャシュ参照防止策入り) //lv.load("number.txt?n=" + now_ms); //--- 以下は私が勝手に作った状況 --- //関数 showNumber の定義 function showNumber() { //テキストフィールド num_txt を作成 createTextField("num_txt", 0, 10, 10, 100, 24); //num_txt を適当に設定 num_txt.background = true; num_txt.border = true; //num_txt に今日の番号を表示 num_txt.text = num_str; } //======================================= ステージ上には特に何も用意しなくて良いです。 スクリプトをコピペした状態で 「number.txt」と同じフォルダに FLAファイル を保存し ムービープレビューやパブリッシュしてもらうと ステージ上に数字が表示されると思います。   ~~~ 回答 その2 へ続く~~~

関連するQ&A

専門家に質問してみよう