この人頭いいなと思ったエピソード

一日毎にランダム切り替わる4桁の数字をフラッシュで作成したい
と思っています。
http://010101.blog25.fc2.com/?style3=10639&index
上記アドレスのサイトのような雰囲気ですが、リロードで数字が変わらないようにしたいと思っています。(左上部分)

一日毎のHP訪問者のラッキーナンバーみたいな感じです。
そのラッキーナンバーをお店にて言って頂くと割引を提供する
ようにしたいと思っています。
(例)
2月28日 1245(固定)
3月1日  4567(固定)
・・・・
といった感じです。

当方のフラッシュはマイクロメディアflashpro 8です。

A 回答 (2件)

#1の方の回答の補足に,



> ちゃんとしたものを作ろうと思うと
> PHPの知識が必要になるわけですね・・・。

と書かれていますが,
これは,

> そのラッキーナンバーをお店にて言って頂くと割引を提供する

という条件があるからですよ。
PHPが必要か不要かはどうでも良いとして,
サーバ上に固定の数を保存しておかなければ,
ラッキーナンバーが正しいかどうかわからないでしょう。
ですから,
サーバ上に固定した値を置いておく,
もしくはサーバ上で固定した値を生成するしかないのです。


もし,

> 上記アドレスのサイトのような雰囲気ですが、
> リロードで数字が変わらないようにしたいと思っています。

というだけのことでしたら,Flash だけで可能です。
しかし,
お客さんが勝手に出した数値を店側が把握できるわけはありませんからね。
ですから,
結局サーバ側でのデータが必要になるので,
Flash で固定の数値を作成しても,それは無駄なのです。
Flash は基本的にクライアントサイド(お客さん側)のPCで実行されるものです。
勝手にクライアントサイドで生成された4桁のランダムな数字なんて,お客さん以外普通はわかりません。


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

PHP などがダメでしたら,
まとめて1ヶ月分くらいの4桁のランダムな数字データを,
手動(またはエクセルなど)で作成し,
メモ帳か何かのテキストエディタでテキストファイルとして保存,
そしてサーバ上にアップしておいてはいかがでしょうか。

例えば次のような感じです。


まずテキストファイルですが,ファイル名を仮に「lucky.txt」というファイル名にしておきます。
テキストファイルのデータ内容は次の --- 内のようにしておきます。

「lucky.txt」
------------------------------------
&date0301=1234&
&date0302=5678&
&date0303=9876&
&date0304=5432&
&date0305=7410&
&date0306=8520&
&date0307=9630&
&date0308=3578&
&date0309=9632&
&date0310=4478&
------------------------------------

意味はわかると思いますが,
date0301=1234
とは,
3月1日用の勝手に作った変数「date0301」の値が「1234」である。
ということです。



Flash の作成ですが,
新規ドキュメントを作成して,
まずステージ上に4桁の数字が表示されるようなダイナミックテキストを用意し,
そのダイナミックテキストフィールドのインスタンス名を,
「today」 にでもしておきます。
ダイナミックテキストの文字の色は
ステージの背景色(白)以外の色にしておいてください。


そして,
新規レイヤーを追加し,
そのレイヤーに次のようなスクリプトを書きます(コピペ可能)。

--------------------------------------------
// ---日付データの準備---
// 今日の時刻オブジェクト myDate を作成
var myDate = new Date();
// 変数 mon 今月を取得
// (月は 0月から始まるので1を加算)
var mon = myDate.getMonth()+1;
// 変数 dat に今日の日付を取得
var dat = myDate.getDate();
// 変数 luckyNum に 月(2桁)と日(2桁)を取得
var luckyNum = ("0"+mon).substr(-2, 2)+("0"+dat).substr(-2, 2);
//
// ---テキストのロードと表示---
// LoadVarsインスタンスの作成
var myLV = new LoadVars();
//
// テキストロード完了時の処理を定義
myLV.onLoad = function(Seikou) {
// ロード成功時
if (Seikou) {
// テキストフィールド today に
// 外部テキストファイルの変数 date? の値を表示
_root.today.text = this["date"+luckyNum];
// ロード失敗時
} else {
// テキストフィールド today に luckyNum を表示
_root.today.text = "ロード失敗";
}
};
//
// 外部テキストを LoadVarsインスタンス にロード
// (※キャッシュデータ参照防止処理入り)
myLV.load("lucky.txt?n="+luckyNum);
--------------------------------------------


それで,
この Fla ファイルを,外部テキストファイル「lucky.txt」と同じフォルダに任意の名前で保存し,
SWF と HTML をパブリッシュします。

そして,パブリッシュされた HTML を開くと,
テキストフィールド today にその日の4桁の数字が表示されると思います。



ただし,
パブリッシュした SWF を開いたり,
ドキュメントの「制御」→「ムービープレビュー」では,
ロードが失敗するため,
テキストフィールド today には「ロード失敗」が表示されてしまうと思います。

なぜロードが失敗するかというと,

 // 外部テキストを LoadVarsインスタンス にロード
 // (※キャッシュデータ参照防止処理入り)
 myLV.load("lucky.txt?n="+luckyNum);

のように,キャッシュデータ参照防止処理を入れた,
"lucky.txt?n="+luckyNum というものが書いてあるからです。
この部分を,普通通り,

myLV.load("lucky.txt");

にしてもらうと,
パブリッシュした SWF を開いたり,
ドキュメントの「制御」→「ムービープレビュー」した場合でもちゃんとラッキーナンバーが表示されると思います。

myLV.load("lucky.txt");
しただけだと,ブラウザのキャッシュ(一時ファイル)を参照表示させる場合があるので,
日々違うデータを用意する場合はこうしておいた方が無難であるため入れています。

例えば今日が 3月2日 であった場合,

myLV.load("lucky.txt?n="+luckyNum);

と書いておくと,Flash は,
「lucky.txt?n=0302」という外部テキストファイルを読みに行こうとします。
明日になれば,
「lucky.txt?n=0303」という外部テキストファイルを読みに行こうとします。
ネット上ではこれで大丈夫ですが,ローカルPCの場合は,
「lucky.txt?n=0302」などというファイルはないので,ロードが失敗してしまいます。

キャッシュには 3月2日 には 「lucky.txt?n=0302」 のキャッシュが残り,
3月3日 には 「lucky.txt?n=0303」 のキャッシュが残り,
日によって違うキャッシュがのこるので古いテキストデータを参照表示されることがなくなります。



本題とは全く関係のないキャッシュの話になってしまいましたが,
話を本題に戻して,
1ヶ月とか3ヶ月単位でラッキーナンバーデータ「lucky.txt」を用意しても,
大したファイルサイズにはならないので大丈夫だと思います。
更新さえ忘れなければ良いわけで,
この方法を使うと PHP などを用意する必要も特にありませんね。



上記スクリプトの,
日付に関しては,次のURLが参考になるかもしれません。

「時間について」
http://hakuhin.hp.infoseek.co.jp/main/as/time.html


LoadVars に関しては,次のURLが参考になるかもしれません。

「LoadVarsオブジェクトを使った外部テキストファイルの読込み」
http://www.fumiononaka.com/TechNotes/Flash/FN030 …


また,
ダイナミックテキストに数字を表示させるのではなく,
画像で表示したい場合は次のURLが参考になるかもしれません。


質問:【カウンタ画像表示】split?
http://oshiete1.goo.ne.jp/qa2754295.html
 ↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/qa2754295.html
    • good
    • 0
この回答へのお礼

貴重なお時間を割いて頂き本当にありがとうございます。

上記方法にて、PHPではありませんが
うまくいきました。

さらに上を目指し、効率化のためにもPHPを勉強してみます。
m(__)m

お礼日時:2007/03/03 16:04

3月1日は誰が訪問しても4567にしたいということであればphpなどを


使ってサーバ側で何とかするしかありません。

phpでランダム4桁数字を作成してテキストファイルとして保存する。
それをswf側からloadVarsで読み込んで表示させる。
という動きになると思います。

細かいことを言うと、
ランダム数字を作成するのは一日一回だけなので、
数字を作成した日も何処かに覚えておかなければなりません。

suuji=1234&koushinbi=20070301

の様にテキストに保存して誰かが訪問するたびにphpで更新日をみて今日の日付でなければ新しくランダム数値を作成してテキストに上書き保存。(もしphpでテキスト作成日や保存日がわかるのであれば日付は必要ないです。)

またあらかじめ画像を用意しておくという手もあります。
20070301.jpgの画像を読み込んで表示するだけで簡単です。
でもアドレスがわかってしまえば、ラッキーナンバーがばれてしまうかもしれません。
それに更新も面倒です。

さらにランダムでなくても良いのならswf側だけでも出来ます。
例えば2007年03月01日の場合この日付を「2」「0」「0」「7」「0」「3」「0」「1」の8つの数字として考え、2桁ずつの和を求めて
2+0=2
0+7=7
0+3=3
0+1=1
これで2731というランダムっぽい数値が出来上がります。
この「2桁ずつの和を求める」方法だと簡単にわかってしまいますが、4桁の数字を作成するロジックをもっと複雑にすればわかりにくくはなるでしょう。
お店側の人がそのロジックさえ知っていれば求めることができるので、
客の言った数字が今日のラッキーナンバーかどうかもわかります。
(というかどんなに複雑な方法で4桁の数字を作成しても
サイトをみればその数字があるわけですからお店にPCがあれば確認できますね。)

なんか素人な考え方ですが参考までに。
    • good
    • 0
この回答へのお礼

貴重なご意見ありがとうございます。

ちゃんとしたものを作ろうと思うと
PHPの知識が必要になるわけですね・・・。

色々また調べてみます。

m(__)m

お礼日時:2007/03/01 14:00

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


おすすめ情報