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

初めまして。
モバイル版のflashで3択の時間制限付きのクイズを作成しております。
仕様としては、
1フレーム目:スタート画面
5フレーム目:時間制限・問題・3択答え部分
9フレーム目:正解画面
14フレーム目:不正解画面
19フレーム目:終了画面

現在タイマーは60秒からカウントダウンしており、
答えを選択し、正解又は不正解の表示後
次の質問に戻るのですが、
タイマーがまた60秒からカウントダウンになります。
1問目で60・59・58秒で答えボタンを押したとし、正解・不正解部分でいったん秒数が止まり、2問目でまた58・57・56・55・・・となるようにするにはどのようにすればよいか教えて下さい。
宜しくお願い致します。

A 回答 (3件)

#1&#2です。


シンタックスエラーは,#2のものをコピペしたからではないでしょうか?

ここのサイトは TAB や 半角スペース を行の先頭に使えないのです。
使っても,すべて消えてしまうので,#2ではわかりやすいように,インデントを全角空白文字で入れたのです。

コピペするのでしたら,
#1のものをコピペして使ってください。
#1のスクリプトの説明を,#2でしただけですから,そのままのコピペでは使えません。
#2のものを使う場合は,
アクションパネルの置換機能で,
全角空白文字を半角空白文字に置換して使用してください。
    • good
    • 0
この回答へのお礼

こんばんは。
シンタックスエラーはsassakunさんのおっしゃる通りでした。
以前にもこんなエラーが出た事があり、理由がわからなかったので勉強になりました。
ありがとうございます。

再度、正解画面の最後のフレーム、不正解画面の最後のフレームに

// _root.countMC に命令
 tellTarget ("/countMC") {
   play();
 }
 // countMC内の変数 mytime1 に 現在の時間を代入
 /countMC/:mytime1 = getTimer();

を入れなおしてみたのですが、なぜかカウントが動きませんでした。

次の問題の最初にフレームにも試しましたがやはりカウントは止まったままでした。

// _root.countMC に命令
 tellTarget ("/countMC") {
   play();
 }
 // countMC内の変数 mytime1 に 現在の時間を代入
 /countMC/:mytime1 = getTimer();

こちらのスクリプトはコピペするだけではいけないと言う事でしょうか?

お礼日時:2006/11/16 17:54

#1です。


やはりわけがわかりません。

#1では,
カウントダウンををストップさせたいときに,

 // _root.countMC に命令
 tellTarget ("/countMC") {
   // フレーム2 へ行ってストップ
   gotoAndStop(2);
 }
 // countMC内の変数 starttime に counter を代入
 /countMC/:starttime = /countMC/:counter;

を実行して,
カウントダウンを再開したいときに,

 // _root.countMC に命令
 tellTarget ("/countMC") {
   play();
 }
 // countMC内の変数 mytime1 に 現在の時間を代入
 /countMC/:mytime1 = getTimer();


を実行してくださいと言う意味のことを書いたのです。
いつカウントダウンを止めたいのか,
いつカウントガウンを再開したいのか,
こちらとしてはわからないのです。

-----------------------------------------------

> 1問目で60・59・58秒で答えボタンを押したとし、
> 正解・不正解部分でいったん秒数が止まり、

この↑ときに,

 // _root.countMC に命令
 tellTarget ("/countMC") {
   // フレーム2 へ行ってストップ
   gotoAndStop(2);
 }
 // countMC内の変数 starttime に counter を代入
 /countMC/:starttime = /countMC/:counter;

を実行し,


> 答えを選択し、正解又は不正解の表示後
> 次の質問に戻るのですが、

この↑ときに,

 // _root.countMC に命令
 tellTarget ("/countMC") {
   play();
 }
 // countMC内の変数 mytime1 に 現在の時間を代入
 /countMC/:mytime1 = getTimer();

を実行してくださいと言う意味のことを,

>> こういったスクリプトを,
>> フレームやボタンに書けば良いと思います。

と書いたのです。
とにかく,スクリプトを形通りにコピペするのではなく,
どういったタイミングで,
どのスクリプトを実行すればいいのかを考えて,
実際にしたいことを実現してください。

どういったタイミングで何をしたいのかなどわかりません。

ボタンで次の問題に行くのでしたら,
その次の問題に行くボタンに,
カウントダウン再開スクリプトを書くべきでしょう。

次の問題に勝手に進むのでしたら,
次の問題の最初にフレーム,
もしくは,
前の問題の「正解」や「不正解」フレーム最後のフレームに,
カウントダウン再開スクリプトを書くべきでしょう。


その辺のところは,書かれていませんし,
仮に書いてくださっても,そのルールを変えたいときに変えるでしょう。
どんなルールでありのかわかりませんし,
どんなルールであっても良いですが,
カウントダウンストップのときにカウントダウンストップのスクリプト。
カウントダウン再開のときにカウントダウン再開のスクリプト。
それぞれを書いてくださいということです。


-----------------------------------
なお,
#1に書いた参考URLで,
その URL の#2の方が,
同じスクリプトを毎回書くのではなく,
call() 関数 を使えば,ファイル容量の節約にもなりますよと回答してくださっています。
call() 関数 を使わずに一々同じ「ストップ」「再開」スクリプトで作ってみて,
さらに容量オーバーでうまく動かない場合は,call() 関数 を使って,
無駄を減らしてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
正解・不正解画面の部分でカウントを止める事はできました。
意味がわかっておらず、そのままペーストしていたのが問題だったようです。
しかし、正解・不正解後のカウントの再開でエラーが出てしまいました。
正解・不正解後は自動的にクイズに飛ぶ仕様となっています。

前の問題の「正解」や「不正解」フレーム最後のフレームに
// _root.countMC に命令
 tellTarget ("/countMC") {
   play();
 }
 // countMC内の変数 mytime1 に 現在の時間を代入
 /countMC/:mytime1 = getTimer();
を記入すると

**エラー** シーン = シーン 1, レイヤー = 各場面, フレーム = 13 :行 2:シンタックスエラー
 tellTarget ("/countMC") {

**エラー** シーン = シーン 1, レイヤー = 各場面, フレーム = 18 :行 2:シンタックスエラー
 tellTarget ("/countMC") {

ActionScript エラー数 :2 報告済みエラー :2

と出てしまいました。

また次の問題の最初にフレームにも試しましたがやはり同じエラーが出ました。

正解・不正解の表示のさせ方がアクションフレームの中に

tellTarget("/"){ gotoAndStop("question");
questionCount++;
if(questionCount > questionToal){
gotoAndPlay("result");
}else{
gotoAndStop("question");

}
}

を使っているのが問題なのでしょうか?

お礼日時:2006/11/15 15:20

> どのようにすればよいか教えて下さい。



と書かれましても,
肝心な,カウントダウンのスクリプトやその仕組みが書かれていないので,
どのようにもこのようにも回答できません。

したがって,
勝手に作ったものの回答でよろしいでしょうか。
勝手に作ったものの作り方を初めから説明します。


こちらで基本的な部分は回答しています。
 ↓↓↓

Flash lite1.0で カウントダウン
http://oshiete1.goo.ne.jp/qa2402811.html
 ↑教えて!goo ↓OKWave(同じです)
http://okwave.jp/qa2402811.html


以下の説明でわからなければ,参考にしてみてください。


---------------------------------------

上の URL と重複する部分が多いですが,
一応,この回答用に書き直しさらにカウント停止と再開のスクリプトを追加回答します。

今作られているものでは,
どうなっているのかさっぱりわからいので,
新規ドキュメントを作成して次のサンプルを作成してみてください。


まず,
_root(メインムービー)のステージ上に ダイナミックテキスト のテキストフィールドを作成し,
例えば 「counter」 という "変数名" を付けます。
この「counter」 という変数名のテキストフィールドを選択して,
ムービークリップに変換します。

そして,その 「counter」 という変数名のテキストフィールド入りのムービークリップに
"インスタンス名" を付けます。
例えば「countMC」というインスタンス名にしておきます。


次に,この「countMC」をダブルクリックして,
ムービークリップ内の編集に入ります。
ムービークリップ内は1フレーム1レイヤーだと思うので,
これを3フレーム2レイヤーにします。
そして,
新しく作成した方のレイヤーの,フレーム1 と フレーム3 をキーフレームにします。

             1   3
 □ レイヤー 筆・・|○ []|○| ←スクリプト用レイヤー
 □ レイヤー 筆・・|●/// []| ←counter のレイヤー


そして,スクリプト用レイヤーのフレーム1 には次のように書きます。

-----------------------------------------
// タイマー(カウンター)の初期値を設定(※可変)
starttime = 60;
// mytime1 に最初の タイム を記録
mytime1 = getTimer();
-----------------------------------------


そして,フレーム3 には次のように書きます。

-----------------------------------------
// mytime2 に随時タイムを取得
mytime2 = getTimer();
// タイマー(カウンター) にカウントダウンを表示
counter = starttime-int((mytime2-mytime1)/1000);

// もし タイマー(カウンター)が 0 以下になれば
if (counter<=0) {

// タイマー(カウンター)の値を 0 に固定
counter = 0;
// ムービークリップ内をフレーム1に戻す
gotoAndStop(1);

// タイマー(カウンター)が 0 より大きいとき
} else {
// ムービークリップ内をフレーム2に戻す(ループ)
gotoAndPlay(2);

}
-----------------------------------------

int は小数点以下を切り捨てる関数です。

これで,
カウント表示用のムービークリップは完成です。


何もない任意の位置をダブルクリックするか,
「編集」→「ドキュメントの編集」で,
_root の編集に戻ってください。

ボタンを(ボタンシンボルのインスタンスを)
どこか2つ適当に作成します。

そして,カウントダウンストップボタンには,
-----------------------------------------
on (release) {
// _root.countMC に命令
tellTarget ("/countMC") {
// フレーム2 へ行ってストップ
gotoAndStop(2);
}
// countMC内の変数 starttime に counter を代入
/countMC/:starttime = /countMC/:counter;
}
-----------------------------------------

ストップ解除(再カウント開始)ボタンには
-----------------------------------------
on (release) {
// _root.countMC に命令
tellTarget ("/countMC") {
play();
}
// countMC内の変数 mytime1 に 現在の時間を代入
/countMC/:mytime1 = getTimer();
}
-----------------------------------------

と書くと,
カウントダウンが止まったり再開したりします。


こういったスクリプトを,
フレームやボタンに書けば良いと思います。
    • good
    • 0
この回答へのお礼

sassakunさん、ご回答ありがとうございます。
また、説明不足で申し訳ございません。

sassakunさんの方法で一度試し、
カウンターの方はできたのですが
やはり、質問の答えを選択後、正解・不正解画面へ飛び、
また60秒からカウントされてしまいます。
カウントダウンストップボタンとストップ解除(再カウント開始)ボタンの入れる場所が違っているのでしょうか・・・。

私が入れた所は質問部分の個所にボタンを作成し、カウントダウンストップを入れ
正解フレームと不正解フレーム部分にストップ解除(再カウント開始)を入れました。

また回答ボタンの場所にカウントダウンストップを入れてもみましたがやはりストップされませんでした。
スクリプトは以下の通りです。

on (release) {
// _root.countMC に命令
tellTarget ("/countMC") {
// フレーム2 へ行ってストップ
gotoAndStop(2);
}
// countMC内の変数 starttime に counter を代入
/countMC/:starttime = /countMC/:counter;
}

on (keyPress "1") {
if(correctNum == 1){
gotoAndStop("correct");
}else{
gotoAndStop("incorrect");
}
}
on (keyPress "2") {
if(correctNum == 2){
gotoAndStop("correct");
}else{
gotoAndStop("incorrect");
}
}
on (keyPress "3") {
if(correctNum == 3){
gotoAndStop("correct");
}else{
gotoAndStop("incorrect");
}
}

お礼日時:2006/11/14 12:11

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