SRC質問掲示板Mk2
(現在 過去ログ83 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■15301 / inTopicNo.1)  待ち時間中のイベント発生は可能?
  
□投稿者/ ドラモンスター -(2004/10/08(Fri) 22:09:50) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    Waitコマンドの書式4を使用した際に発生する待ち時間を計測して
    一定時間の経過を確認したら何らかのコマンドを実行することはできないのでしょうか。

    ストレートな方法でなくともそういうことが発生しているように見せられればどんな処理でもかまいません。
引用返信/返信 削除キー/
■15302 / inTopicNo.2)  Re[1]: 待ち時間中のイベント発生は可能?
□投稿者/ TomTom -(2004/10/08(Fri) 22:33:04) [ID:W5AuCyaF]
    >Waitコマンドの書式4を使用した際に発生する待ち時間を計測して
    >一定時間の経過を確認したら何らかのコマンドを実行することはできないのでしょうか。

    Do〜Loop内で、
    ・KeyState関数でクリックしたときを検知したとき
    ・時間データ処理系関数で指定した時間が来たとき
    にループを終了するようにしてください。
引用返信/返信 削除キー/
■15303 / inTopicNo.3)  Re[2]: 待ち時間中のイベント発生は可能?
□投稿者/ ドラモンスター -(2004/10/08(Fri) 22:59:11) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    No15302に返信(TomTomさんの記事)
    > >Waitコマンドの書式4を使用した際に発生する待ち時間を計測して
    > >一定時間の経過を確認したら何らかのコマンドを実行することはできないのでしょうか。
    >
    > Do〜Loop内で、
    > ・KeyState関数でクリックしたときを検知したとき
    > ・時間データ処理系関数で指定した時間が来たとき
    > にループを終了するようにしてください。

    ↓イベントデータここから

    Do
      Wait Click
    Loop While ((KeyState(37) Or KeyState(38) Or KeyState(39) Or KeyState(40)) = 1)

    ↑イベントデータここまで

    それまでWaitコマンドの書式4だけを使用していた部分を上記のように改変しました。
    なぜかはわかりませんが、KeyState関数が無視されるようになりました。
    KeyState関数の判定の仕方が間違っているのでしょうか。

    それと「Do〜Loop内」というのはこういった作りでよろしいのでしょうか。

    時間関係の処理は入れていません。
    どのタイミングで入れればいいかわからないということもあります。
引用返信/返信 削除キー/
■15305 / inTopicNo.4)  Re[3]: 待ち時間中のイベント発生は可能?
□投稿者/ TomTom -(2004/10/08(Fri) 23:42:50) [ID:W5AuCyaF]
    >Do
    >  Wait Click
    >Loop While ((KeyState(37) Or KeyState(38) Or KeyState(39) Or KeyState(40)) = 1)

    ((KeyState(37) Or KeyState(38) Or KeyState(39) Or KeyState(40)) = 1)
    のような判定は不可能です。
    (KeyState(37) = 1 Or KeyState(38) = 2 Or …)とひとつずつ判定してください

    また、Wait Clickは。邪魔です消してください。そこに時間関係の処理が入ります。
引用返信/返信 削除キー/
■15306 / inTopicNo.5)  Re[4]: 待ち時間中のイベント発生は可能?
□投稿者/ ドラモンスター -(2004/10/09(Sat) 00:39:56) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    No15305に返信(TomTomさんの記事)
    > >Do
    > >  Wait Click
    > >Loop While ((KeyState(37) Or KeyState(38) Or KeyState(39) Or KeyState(40)) = 1)
    >
    > ((KeyState(37) Or KeyState(38) Or KeyState(39) Or KeyState(40)) = 1)
    > のような判定は不可能です。
    > (KeyState(37) = 1 Or KeyState(38) = 2 Or …)とひとつずつ判定してください
    >
    > また、Wait Clickは。邪魔です消してください。そこに時間関係の処理が入ります。

    ↓イベントデータここから

    Do
      基準時間 = GetTime()
    Loop While (KeyState(37) = 0 Or KeyState(38) = 0 Or KeyState(39) = 0 Or KeyState(40) = 0)

    ↑イベントデータここまで

    上記のように改変したところ、無限ループに突入して強制終了を余儀なくされました。
    上記の判定の「0」を「1」に変えても
    そのイベントの下に作成したKeyState関数を判定に使ったコマンドが実行されませんでした。

    尚、上記のイベントの直前で
    「Wait Click」
    を実行しています。


引用返信/返信 削除キー/
■15307 / inTopicNo.6)  Re[5]: 待ち時間中のイベント発生は可能?
□投稿者/ TomTom -(2004/10/09(Sat) 09:18:14) [ID:W5AuCyaF]
    Do〜Loop Whileは、「式の値が満たされている間、処理を続ける」というものです。
    While以降の式を見直してください。
引用返信/返信 削除キー/
■15308 / inTopicNo.7)  Re[5]: 待ち時間中のイベント発生は可能?
□投稿者/ 玖琺祐一郎 -(2004/10/09(Sat) 09:47:12) [ID:J0BdXTQv]
    はじめまして(?)、玖琺祐一郎です。

    イベントデータの情報があまりにも少ないので自分もテストしてみましたが、これでは間違いなく無限ループに突入する仕様になっています。

    > ↓イベントデータここから
    >
    > Do
    >   基準時間 = GetTime()
    > Loop While (KeyState(37) = 0 Or KeyState(38) = 0 Or KeyState(39) = 0 Or KeyState(40) = 0)
    >
    > ↑イベントデータここまで
    >
    > 上記のように改変したところ、無限ループに突入して強制終了を余儀なくされました。
    > 上記の判定の「0」を「1」に変えても
    > そのイベントの下に作成したKeyState関数を判定に使ったコマンドが実行されませんでした。

    下から改良版です

    Show

    ##↑↑指定したキーが押されているか判定します。キーが押されていれば1を、押されていなければ0を返します。メインウィンドウがアクティブになっていない(フォーカスされていない)場合はキーが押されていても0を返します。マウスボタンのキー入力検出の際はさらにマウスカーソルがマップウィンドウ上にない場合も0を返します。(SRCヘルプより抜粋)
    ##ということなのでメインウインドウを表示させてください。

    Talk 藤原忍(攻撃)
    ウインドーズの時間計測やってやるぜ!;俺のメッセージ終了後、好きな時間にカーソルのどれかを押せよ!
    End
    Do

      基準時間 = GetTime()

    Loop While ((KeyState(37) = 0) And (KeyState(38) = 0) And (KeyState(39) = 0) And (KeyState(40) = 0))

    ##↑↑Do〜Loop While分は書式が当てはまるなら繰り返し実行という命令文です。
    ##そのため、『キーボードのカーソルキーがもし押されたなら』という状態でループを抜けるには上のように『カーソルキーがどれも押されていない状態』で判定しないといけません。
    ##> Loop While (KeyState(37) = 0 Or KeyState(38) = 0 Or KeyState(39) = 0 Or KeyState(40) = 0)だと、理屈上では全てのカーソルキーが押されていなければ抜ける事は出来ません。あくまで理屈ですが。(SRC本体の同時押しの判定精度が高ければ判定も可能かもしれませんが、ためしてないのでわかりません。)

    Talk 藤原忍(攻撃)
    $(基準時間/1000)秒くらいか?
    End

    上まで改良版です。
    (Talk文が入っているのはより状況を把握しやすいようにと自分が入れただけなので。メッセージの表示していないWait Clickよりはわかりやすいので。本来ならドラモンスターさんの処理が入る部分です。)

    関数の使い方を覚えるのはSRCでシナリオを作っていくうえで結構重要なので、ぜひ頑張ってください。

    それでは失礼します。
引用返信/返信 削除キー/
■15311 / inTopicNo.8)  Re[6]: 待ち時間中のイベント発生は可能?
□投稿者/ ドラモンスター -(2004/10/10(Sun) 00:59:33) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    ↓イベントデータここから

    基準時間 = GetTime()
    Wait Click
    If GetTime() - 基準時間 > 1000 Then
      Talk システム
      1秒経過しました。
      End
    EndIf

    ↑イベントコマンドここまで

    Doコマンド内で取得すると、必ず約60ミリ秒の値が算出されてしまい、
    これでは使い物にならないので、Doコマンドを削除して
    「Wait Click」
    を実行する前に基準時間を取得するようにしました。

    取得自体はうまくいきましたが、
    1秒後にはメッセージが表示されず1秒経過後のボタンを押した時に表示されます。

    私としては規定時間が経過した瞬間にメッセージが表示されることを想定しています。
    こういったことは不可能なのでしょうか。
    それとも条件式が間違っているのでしょうか。
引用返信/返信 削除キー/
■15312 / inTopicNo.9)  Re[7]: 待ち時間中のイベント発生は可能?
□投稿者/ TomTom -(2004/10/10(Sun) 01:26:21) [ID:bHkXC2pw]
    いいからDo〜Loopを使用してください、Wait Clickは使用しないでください。

    Wait Clickは「ボタンを押すまでいくらでも待ち続け、その間に何も処理をしない」命令です。あなたのやりたいことが実現できるわけがないことは理解できますね?

    ループ内で正常な時間が取得できないのは、取得の仕方が悪いだけでしょう。
引用返信/返信 削除キー/
■15313 / inTopicNo.10)  Re[8]: 待ち時間中のイベント発生は可能?
□投稿者/ ドラモンスター -(2004/10/10(Sun) 01:50:16) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    ↓イベントデータここから

    Do
      If IsVarDefined(基準時間) = 0 Then
       基準時間 = GetTime()
      EndIf
    Loop While ((KeyState(37) = 0) And (KeyState(38) = 0) And (KeyState(39) = 0) And (KeyState(40) = 0))
    If GetTime() - 基準時間 > 1000 Then
      Talk システム
      1秒経過しました。
      End
    EndIf

    ↑イベントデータここまで

    上記のように改変しました。Waitコマンドの書式4はどこにも使っていません。
    KeyState関数を判定に使ったIf文は正常に実行されています。
    しかし、GetTime関数を判定に使ったIf文はカーソル操作を行った後に実行されます。これは私が意図する動作ではありません。
    そして、カーソル操作を行わないと無限ループに突入してしまいます。強制終了を余儀なくされてしまいます。
    カーソル操作を行うことでそれは回避できるのですが、どうにかしてこれを回避したいです。

    基準時間の取得は1回に限定しているので、無限ループになるのはおかしいと思うのですが、どうでしょう。
    これは「0=0」という式を使った正常な強制終了を必要としない無限ループ内で使用している処理で、
    「基準時間」という変数はその処理が1回実行されるごとに上記の処理を実行する前に削除しています。
引用返信/返信 削除キー/
■15314 / inTopicNo.11)  Re[9]: 待ち時間中のイベント発生は可能?
□投稿者/ TomTom -(2004/10/10(Sun) 02:09:09) [ID:bHkXC2pw]
    ループ中に固まるなら、Loopの直前にでも「Wait 0」と入れてください。

    ところで、このコードの意味を自分でわかってますか?
    このままでは「クリックするまでDo〜Loopから抜けない」わけで「Waiy Click」を使用しているのと何も変わらないわけですが。

    どうも、いつまで経っても終わりそうにないので、ヒントだけ出して私からのレスは終了したいと思います。
    ・時間の基準値Do〜Loopの前に取得する
    ・ループ内で時間の判定をする
    以上です。
引用返信/返信 削除キー/
■15315 / inTopicNo.12)  Re[10]: 待ち時間中のイベント発生は可能?
□投稿者/ ドラモンスター -(2004/10/10(Sun) 04:21:07) [ID:57T32sOL]
http://kagemaro.gozaru.jp/index.html
    私はドラモンスターです。

    TomTomさんのヒントのおかげで問題は解決されました。

    皆さん、ありがとうございました。
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -