• 締切済み

【Flash】クリック回数制限

お世話になっております。 AS2、CS3でこのたびFlashでガチャを作っております。 ポイント消費ではなく、一日に三回まで回せるという仕様にしたいと考えております。 ガチャ自体はこちらの http://allabout.co.jp/gm/gc/66791/2/ おみくじを参考にでた結果をアイテムとし クリックであらかじめアバターページに非表示で配置していたアイテムを visible=true;で表示させようと考えております。 1フレーム目に「ガチャへ」「アバターへ」というボタンを設けたいと思っております。 2フレーム目をアバターにし、3フレーム目からおみくじにしたいと考えておりますので 「ガチャへ」ボタンをクリックで3フレーム目に飛ばしたいのですが 「一日三回まで」という回数の制限ができず困っております。 一日三回までボタンのクリックができ、三回以上はフレーム移動をしないなど ボタンの無効化をしたいと考えております。 今日の日付の取得やSharedObjectを使用するのだとは思うのですが… ご教授いただけますと幸いです。

みんなの回答

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

【訂正】#1 です。       すみません。       図を貼り間違えました。。。

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

回答の前提条件として, 書かれていらっしゃるページの下の方にある 「完成したファイルをダウンロード」 と書かれた部分から「act24.fla」をダウンロードされていて それを変更しなが作成されていることを念頭に回答する方向で行きます。 もちろん 全くの新規で別のもの作っても良いですが, 一定の基準を作っておないと, スクリプトの書き方などがチグハグで変になって 後々の管理もしにくくなるためでです。 ただし...! ご質問中に大不明な点があります...(困)。 > 1フレーム目に「ガチャへ」「アバターへ」 > というボタンを設けたいと思っております。 ↑ということは 「直接3フレーム目に行く」場合と, 「2フレーム目を経由して3フレーム目に行く」場合の, 2通り「3フレーム目に行く」道があるのですよね? >「ガチャへ」ボタンをクリックで3フレーム目に飛ばしたいのですが >「一日三回まで」という回数の制限ができず困っております。 ↑ということは 「ガチャへ」ボタンに一日三回の制限を付けるわけですよね? そうすれば確かに 「直接3フレーム目に行く」ことには一日三回の制限ができます。 しかし それでは「2フレーム目を経由して3フレーム目に行く」ことが阻止ができませんよ? それとも 「2フレーム目を経由して3フレーム目に行く」ということはないのでしょうか? もしそうであれば問題は起こらないと思いますが。。。 この辺の仕様がイマイチ(全く)理解できないので, 「アバターへ」ボタン(2フレーム目に行くボタン)のことについては無視させていただきます。 (ご質問には全く書かれていなかったものとします。) そうした場合, メインタイムラインのフレーム1に配置した 「ガチャへ」ボタン(「3フレーム目に行く」ボタン)自体に書くスクリプトとして 次のようなコードを書けば良いと思います。 //------------------------------ on (release) { //今の Date オブジェクトを作成 var now_dt = new Date(); //西暦年を4桁で取得 var yyyy = now_dt.getFullYear(); //月を1から始まる2桁文字列で取得 var mm = ("0"+(now_dt.getMonth()+1)).slice(-2); //日を2桁文字列で取得 var dd = ("0"+now_dt.getDate()).slice(-2); //yyyymmdd を 数値に変換 var yyyymmdd = Number(yyyy+mm+dd); // //trace(yyyymmdd); //(←※動作確認用(本来削除)) // //変数 so にローカル SharedObject の参照を得る var so = SharedObject.getLocal("omikuji"); // //trace(so.data.cnt); //(←※動作確認用(本来削除)) // //もし SharedObjectに ymd が存在しない か //または yyyymmdd 未満である場合は if (so.data.ymd == undefined || so.data.ymd<yyyymmdd) { //SharedObject の ymd に yyyymmdd を保存 so.data.ymd = yyyymmdd; //SharedObject のカウンター cnt を 1 にする so.data.cnt = 1; //フレーム3 (おみくじのフレーム)に行く gotoAndStop(3); // //もし SharedObject の ymd が yyyymmdd と等しく //なおかつ SharedObject のカウンター cnt が 3 未満 であれば } else if (so.data.ymd == yyyymmdd && so.data.cnt < 3) { //SharedObject のカウンター cnt に 1 を加算する so.data.cnt++; //フレーム3 (おみくじのフレーム)に行く gotoAndStop(3); } } //------------------------------ なお,当然のことですが, 上のスクリプトを書いてパブリッシュしたSWFでは 開発者(質問者さん)自身であっても その日の間は3回より多く「ガチャへ」ボタンを動作させることができなくなりますよ。 ですから 調整や作り直しがしにくくなるとは思います。 しかし上で書いたスクリプトの場合は, いわゆる複数ファイル間での「共有オブジェクト」として SharedObject を使っているわけではないので, 手軽に何度でも実験し直したいときは パブリッシュ設定で作成する SWF の名前を変えて行くと良いでしょう。 またはフォルダを変えて行っても良いです。 他にも, 「.sol ファイルを削除しながら検証する」とか 「PCの日付を1日ずつ先に進めながら検証する」とか 「SharedObject のデータを削除する別のボタンを作る」とか 色々な方法はありますけどね。 ちなみに開発者(質問者さん)用だけに 「SharedObject のデータを削除する別のボタンを作る」 のでしたら 適当に四角い塗りのボタンでも作って そのボタン自体に次のように書いておけばいいでしょう。 //------------------------ on (release) { //SharedObject の ymd を undefined にする so.data.ymd = undefined; } //------------------------ ※このボタンはあくまでも開発者用です。   消し忘れに注意してください。

この投稿のマルチメディアは削除されているためご覧いただけません。
mizuki_x
質問者

お礼

お礼が遅くなってしまい大変申し訳御座いません ご回答いただきありがとうございます! わかりやすく、画像まで添付していただいたおかげで 無事作ることができました。 ありがとうございます!

関連するQ&A