- ベストアンサー
Flash lite1.0で計算クイズを作成する方法
- 初心者でもモバイル版のFlash lite1.0を使用して計算クイズを作成する方法について教えてください。
- スタート画面でボタンを押すとクイズが始まり、ランダムに表示される問題に答えを入力します。
- 問題終了後は正解率やかかった時間をランキングに表示する仕様にしたいです。また、問題数を増やす方法と答えの入力方法も教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> クイズが9問までしかできません。 意味不明,全く理解不能です。 どういうルールで,9問しかできないようにしているのでしょうか? その方法がわかりません。 それ以前に,普通のFlash は作れるのでしょうか? 携帯用Flash は 普通の Flash の10倍くらい難しい物だと考えた方が良いです。 場合によっては 1000倍以上難しいです。 今回の場合は, 携帯用の Flash も普通の Flash もさほど変わらないと思いますが, スクリプトの制約,画面の大きさの制約,マウスが使えないという制約,パスの数(図形の複雑さ)の制約,容量の制約… などなど, 普通の Flash を作れない人には,携帯 Flash は当たり前ですが無理です。 普通の Flash を自力で作ることができれば, 場合によって,携帯 Flash も作成可能かもしれません(不可能かもしれません)。 > 答えを入力し、正解・不正解の表示をさせる方法がわかりません。 テキスト入力のテキストフィールドを用意して, 入力してもらうようにして, 正解 であれば," 正解" などと表示されたフレームに 不正解 であれば,"不正解" などと表示されたフレームに それぞれ飛ぶという方法で良いのではないでしょうか。 > 答えは二桁まで入力可能にしたいです テキストフィールドを選択して, 下のプリパティパネルで,最大文字数を 2 にすれば良いと思います。 == 作成例 =================== ~概要~ 1 5 レイヤー ・・・|○|○|○|○|○| ←スクリプト用 レイヤー ・・・|●|●|●|●|●| ←ボタンなど フレーム1 …「スタート」ボタン フレーム2 …問題表示&回答 フレーム3 …「正解:○」を表示 フレーム4 …「不正解:×」を表示 フレーム5 …時間と正解率の表示(終了) ~詳細~ ◎フレーム1 用意する物 ・「スタート」ボタン(インスタンス名不要) フレーム1のフレームに書くスクリプト ---------------------- stop(); // 問題数の設定(可変) n = 100; // カウントの初期化 count = 0; // 得点の初期化 tokuten = 0; ---------------------- フレーム1 の「スタート」ボタンに書くスクリプト ---------------------- on (release) { time1 = getTimer(); gotoAndStop(2); } ---------------------- ◎フレーム2 用意する物 ・「toi」という 変数名 のダイナミックテキストのテキストフィールド ・「touan」という 変数名 のテキスト入力のテキストフィールド (最大文字数を 2 に設定しておく) ・「OK」ボタン(インスタンス名不要) フレーム2のフレームに書くスクリプト ---------------------- // a にランダムな 0~99 までの 100個の乱数を代入 a = random(100); // a と足しても99までにしかならない乱数を代入 b = random(100-a); // 問いテキストフィールドの表示 toi = a add "+" add b add "="; // 答案の初期化 touan = ""; ---------------------- フレーム2 の「OK」ボタンに書くスクリプト ---------------------- on (release) { // カウントに 1 を加算 count++; // もし答案が正解であれば if (touan eq a+b) { // 得点に 1 を加算 tokuten++; // フレーム3へ gotoAndStop(3); } else { // それ以外(不正解)であればフレーム4へ gotoAndStop(4); } } ---------------------- ◎フレーム3 用意する物 ・「正解:○」などのテキストまたは絵など ・「OK(次へ)」ボタン(インスタンス名不要) フレーム3 の「OK(次へ)」ボタンに書くスクリプト ---------------------- on (release) { // もしカウントが設定回数に達したら if (count == n) { // フレーム5 へ進む gotoAndStop(5); } else { // それ以外は問題に戻る gotoAndStop(2); } } --------------------- ◎フレーム4 用意する物 ・「正解:×」などのテキストまたは絵など ・「OK(次へ)」ボタン(インスタンス名不要) フレーム4 の「OK(次へ)」ボタンに書くスクリプト (フレーム3のボタンと全く同じ) ---------------------- on (release) { // もしカウントが設定回数に達したら if (count == n) { // フレーム5 へ進む gotoAndStop(5); } else { // それ以外は問題に戻る gotoAndStop(2); } } --------------------- ◎フレーム5 用意する物 ・「time2」という 変数名 のダイナミックテキストのテキストフィールド ・「seikairitu」という 変数名 のダイナミックテキストのテキストフィールド ・「リプレイ」ボタン(インスタンス名不要) フレーム5 のフレームに書くスクリプト ---------------------- // time2 に経過時間を代入 time2 = (getTimer() - time1)/1000; // 正解率 を表示 seikairitu = tokuten add "/" add n; --------------------- フレーム5 の「リプレイ」ボタンに書くスクリプト ---------------------- on (release) { gotoAndStop(1); } ---------------------- また, 必要に応じて,終了するボタンを用意して, ---------------------- on (release) { getURL("任意の別のページ"); } ---------------------- などを用意しておくなど, 他は工夫次第で様々なことをすればOK。 ========================= こんな感じで,簡単に作れます。 また, 他にも色々方法はあると思います(ありすぎると思います)。 色々考えて見られてはいかがでしょうか。
その他の回答 (1)
#1です。 > 問題部分ですが0~99の乱数となっておりますが、 > 0を省きたいのですがどのようにしたら省けるでしょうか? 単純に1を足せば良いですね。 また,0を除く分,個数は1つ減ります。 a = random(100); ↓変更↓ a = random(99)+1; > また、答えを入力する際、 > 問題画面上に直接答えを入力させ、 これは,意味がわかりません。 入力したものを表示させる何かが必要だと思いますが。 入力したものを表示させる何かというのがテキストフィールドです。 大きさや場所はどこでもかまいません。 > (答えが2桁の場合があるので答えを入力してから2秒後) この人(計算ゲームをしている人)は, 1桁の数を打とうとしているのか,2桁の数を打とうとしているのか,どうやって判断するのでしょうか。 判断はできませんね。 12 を答えたくて,1を入力した1時間後に2を入力する場合も考えられます。 ですから, 入力完了かどうかはボタンを押すなどが必要となります。 「入力してから2秒後」 ではなく, 「入力を開始した2秒後」だと,なんとかすればできると思います。 Flash Lite 1.0 では,テキストフィールドの値を監視するようなメソッドはありませんから, テキストフィールドの値を監視する構造体を自作しなければなりません。 ムービークリップを1つ作って, そのムービークリップのフレームを複数フレームにしてループさせ, テキストフィールドに値が入った瞬間("" でなくなったとき)に, play(); などでフレームを進ませ,15fps だと 30フレーム 後に, 判定させるスクリプトで○か×のフレームにジャンプさせるのが簡単だと思います。 そのときのタイマー時間表示は, この辺をご覧(Flaファイルダウンロード)になって,研究してみてください。 「FLASH4スクリプト ストップウォッチ」 http://fpower.org/old/f4timer.htm Flash Lite 1.0 は Flash 4 仕様です。 文法やスクリプトは現在のものと違いますが, 「lbf4timer1.fla」を Flash 8 などで開くと,旧スクリプトは現在のスクリプトに自動的に書き替えられますので,即,Flash Lite 1.0 で使用可能です。 しかし,サンプルのように _root でグルグルループされては困ります。 ですから,これもムービークリップ を1つ作って, その中の フレームをグルグルループさせ,時間を計測する必要が出てくると思います。 「答えを入力してから2秒後」 ではなく 「問題が表示されて2秒後」 だと, 自動ジャンプ可能です。 ただし,この場合, 100問を終える時間は最初からわかっているので(例:2秒×100問=200秒), タイマーの意味はなくなります。 これも実際の時間を指定するより, フレームレートを 15fps にして,30フレームで 2秒経過とする方がずっと簡単ですね。 また, Flash Lite では, ムービークリップから他の階層のタイムラインを進めたり止めたりするのには, tellTarget() を使います。 ---例--------------- tellTarget ("/") { gotoAndStop(5); } -------------------- これは現在の _root.gotoAndStop(5); と同じ事ですが,コレ↑は Flash Lite では通用しません。 全体的に, 書かれているようなことは,結構難しいと思いますよ。 普通の Flash ではそんなに難しくありませんが, Flash Lite となると難しくなります。 しかし,基本的に考えるとできなくも無いことだと思うので,考えることです。
お礼
答えを入力する際、問題画面上に直接答えを入力させ と言う物なのですが、 現在、携帯で答えを入力する際、テキストフィールドにフォーカスを合わせて決定し、携帯の文字入力画面で 入力文字を漢字から数字に変更し、そこで文字を入力し、決定する・・・と言う方法になっているので 直接問題画面のあるtouanのフィールド上に数字で入力したいと言う事です。 またsassakunさんのおっしゃる通り「入力してから2秒後」 ではなく、「入力を開始した2秒後」でした。 テキストフィールドに値が入った瞬間("" でなくなったとき)に, play(); はif文でムービークリップの中に書けばいいのでしょうか? ("" でなくなったとき)は(!"")だとはわかったのですが、テキストフィールドに値が入った瞬間 の書き方が分からない状態です。
お礼
ご返答ありがとうございます。 >普通のFlash は作れるのでしょうか? 普通のFlashではまだ作成した事はございません。 仕様の説明不足、申し訳ございません。 まず、問題部分ですが0~99の乱数となっておりますが、0を省きたいのですがどのようにしたら省けるでしょうか? また、答えを入力する際、問題画面上に直接答えを入力させ、(答えが2桁の場合があるので答えを入力してから2秒後) 「OK(次へ)」ボタン無しに自動的に正解・不正解を表示させたいと思っております。 また、正解・不正解が表示されている際、タイマーを止めたいのですが可能でしょうか? 質問ばかりですが宜しくお願いします。