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

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

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

■16148 / inTopicNo.1)  制限時間設定
  
□投稿者/ 地獄の神 -(2005/02/27(Sun) 01:26:19) [ID:5eiE20q5]
    ども、毎度のへたれ代表の地獄の神ですw
    今回は「イベントで制限時間内にコマンドを入力していく」という動作に挑戦していました。
    ぇー制限時間をつける方法がわからないという根本的な問題が…という事でここへアドバイスを頂きにやって参りました。

    コマンド入力は< KeyState(キー番号) >を使用する形にしています。

    現段階でこんなヘンテコなやり方で制御しています。


    Question 30 コマンド入力
    ↓+→+↑A(40+39+38,65)
    End
    Wait 0
    If KeyState(40) Then
    Wait Click
    If KeyState(39) Then
    Wait Click
    If KeyState(38) + KeyState(65) = 2 Then
    PlaySound comond.wav
    Font 24pt P明朝 Bold 通常
    PaintString - - 四神降臨
    Refresh
    Wait Click
    ClearPicture



    以下略


    Nowを使って現時間取得をして、i = DiffTime(時間1,時間2)で残り時間を出し変数に入れて、PaintString - - $(i)などで表記しようと考えたのですが、表記できても実際時間が経過しても次のステップへ移動できません。
    このような考えはやはり根本的な「時間設定」に関する記事を理解してないからでしょうか?

    あわせてのご回答お待ちしております。
    乱文乱筆ですいません。
引用返信/返信 削除キー/
■16153 / inTopicNo.2)  Re[1]: 制限時間設定
□投稿者/ TomTom -(2005/02/27(Sun) 10:43:40) [ID:mc0S8D3Q]
    TomTomです。

    QuestionコマンドとWait Clickコマンドを使用してお望みの処理を作成することは不可能かと思います。
    Questionコマンドは選択肢を選ぶか制限時間が来るまで他の処理はしませんし、
    Wait Clickは入力があるまで延々とそこで処理を止めますから、
    〜秒以内に、という処理で使用することは出来ないのです。

    また、Ifコマンドで最初の入力から順に処理していますが

    >If KeyState(40) Then
    >Wait Click
    >If KeyState(39) Then
    >Wait Click

    このように記述しても、「40番が押されていなければ39番が押されているか調べる」
    という処理をするだけですので、「40番が押された後に39番をを調べる」ということにはなりません。
    また、KeyState関数で入力を検知するのはほんの一瞬のことなので、もし順番に調べるということが出来ても
    コンピュータの処理に追いつく人外魔境な入力速度が必要になります。

    実際にKeyState関数を使ってキー入力を調べるには、Do〜Loopでループさせる必要があります。
    そして、そのループ内で一つずつ順にキーの入力を調べます。
    こんな感じで。

    # キーの入力順を設定
    Set KeyList
    KeyList[1] = 40
    KeyList[2] = 39
    KeyList[3] = 38
    KeyList[4] = 65
    # 現在何番目のキーを調べているか
    Set Chk 1
    # 開始時間
    Set StartTime Now
    # ループ開始
    Do
     # Chk番目のキーが入力されたかどうかを確認
     If KeyState(KeyList[Chk]) Then
      # 調べるキーを次のキーにする
      Incr Chk
     EndIf
     Wait 0 //これが無いとSRCが応答無しになるので、おまじないとして入れておいてください
    # 入力を調べ終わるか、30秒経つまでループ
    Loop While ((Chk <= 4) And (DiffTime(StartTime, Now) <= 30))

    このループを抜けた後Chkの値が4より大きければ(つまり5なら)、入力が成功したということになります。

    ただし「↑A」と書いてらっしゃるような「キーの同時押し」には対応していません。
    また、格闘ゲームのように「入力を失敗したら最初からやり直し」ではなく、タイピングゲームのように「成功するまで次のキーを調べ続ける」処理になっています。

引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -