(解決済)タイマーの条件分岐で丁度0秒で、一瞬だけスイッチが起動されるのを防ぎたい

天照@61

ユーザー
こんにちは。
タイマーについて質問があります。

【イベント】1ページ目
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆スイッチの操作:#0104 レバーA_1 = ON
◆タイマーの操作:始動, 0分3秒

【イベント】2ページ目
出現条件:スイッチ:レバーA_1がON
◆条件分岐:タイマー ≤ 0分0秒
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆タイマーの操作:停止
◆スイッチの操作:#0104 レバーA_1 = OFF

:分岐終了

【イベント】3ページ目
出現条件:スイッチレバーA_2
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆ウェイト:30フレーム
◆SEの演奏:Switch1 (90, 80, 0)
◆タイマーの操作:停止
◆スイッチの操作:#0106 レバーA仕掛け作動 = ON

【イベント】4ページ目
出現条件:スイッチ:レバーA仕掛け作動ON
◆文章:なし, ウィンドウ, 下
:  :これ以上動かす必要はない。

としています。
このイベントがあとひとつあります。
仕掛け的に、スイッチAorスイッチBを押すともう片方が起動してレバーが下がるというものです。
制限時間(3秒)以内にもうひとつのレバーを下げなければ戻ってしまうという仕掛けです。
仕掛け自体はうまくいっているのですが、これだとタイマーが0秒になったと同時にもう片方のレバーを下げると、先に下げていたレバーの方が一瞬だけ上がってしまいます。
おそらく0秒になった瞬間に先に押していた方のスイッチAが元に戻り、もう片方のスイッチBは下がるので、一瞬だけスイッチAが反応してレバーが上がるのだと思います。
これを反応させない方法はありますか?
説明が下手で申し訳ございません。
どなたかご助力いただければと思います。
よろしくお願いいたします。

長文失礼いたしました。
 

ジェミニ

ユーザー
こんにちは。文章だとわかりにくかったので整理してみました。
あってますか?「スイッチ」と「レバー」と2つ言葉が出てきていますが同じものですよね?
  • やりたいこと
    • 制限時間(3秒)以内に2つのスイッチ(A・B)を押す。
    • 制限時間オーバーしたら元に戻す。
  • 今起きてる問題
    • 0秒時にスイッチ押すと、押したスイッチが、一瞬元に戻ってしまう。
以下解決案というか、こういう風にイベント作ればいいんじゃないかなと思ったので書きました。
未検証ですが、これでどうでしょう。
仕掛けのスイッチとツクールのスイッチが同じ言葉なので見づらいかも。

  • イベントを3つつくる。
    1. スイッチA
      • ページ1
        • 条件:なし(同時押しイベント開始フラグ用のスイッチがあるならそれを指定でもいいかも)
        • トリガー:プレイヤーから接触
        • 内容:スイッチ下げて、スイッチ(ツクールの$gameSwitchesのほう)ONにする。
          • 名前は「スイッチAがON」とかかな?
      • ページ2
        • 条件:「スイッチAがON」がON
        • トリガー:プレイヤーから接触
        • 何もしない。
          • もう一度押したら戻せるようにしてもいいかも。
    2. スイッチB
      • スイッチAと同じで条件に指定するスイッチだけ別
    3. タイマー監視用イベント(タイマーをセットしているイベントがあると思うので、それと同じイベントで良さそう)
      • ページN
        • 条件:同時押しイベント開始フラグがON
        • トリガー:並列処理
        • 条件分岐(「スイッチAがON」)
          • 条件分岐(「スイッチBがON」)
            • 同時押しイベント終了フラグ用のスイッチONにする
            • イベント処理の中断
        • 条件分岐(タイマーが0分0秒以下)
          • 「スイッチAがON」・「スイッチBがON」どちらもOFFにする
        • ウェイト1フレーム
      • ページN+1
        • 条件:同時押しイベント終了フラグ用のスイッチON
        • トリガー:自動実行
        • 内容:タイマー消してそのあとにやりたいことをやる。
 

munokura

ユーザー
こんにちは。
タイマーについて質問があります。

【イベント】1ページ目
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆スイッチの操作:#0104 レバーA_1 = ON
◆タイマーの操作:始動, 0分3秒

【イベント】2ページ目
出現条件:スイッチ:レバーA_1がON
◆条件分岐:タイマー ≤ 0分0秒
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆タイマーの操作:停止
◆スイッチの操作:#0104 レバーA_1 = OFF

:分岐終了

【イベント】3ページ目
出現条件:スイッチレバーA_2
◆SEの演奏:Switch3 (90, 80, 0)
◆移動ルートの設定:このイベント (ウェイト)
:        :◇向き固定OFF
:        :◇左を向く
:        :◇ウェイト:5フレーム
:        :◇右を向く
:        :◇ウェイト:5フレーム
:        :◇向き固定ON
◆ウェイト:30フレーム
◆SEの演奏:Switch1 (90, 80, 0)
◆タイマーの操作:停止
◆スイッチの操作:#0106 レバーA仕掛け作動 = ON

【イベント】4ページ目
出現条件:スイッチ:レバーA仕掛け作動ON
◆文章:なし, ウィンドウ, 下
:  :これ以上動かす必要はない。

としています。
このイベントがあとひとつあります。
仕掛け的に、スイッチAorスイッチBを押すともう片方が起動してレバーが下がるというものです。
制限時間(3秒)以内にもうひとつのレバーを下げなければ戻ってしまうという仕掛けです。
仕掛け自体はうまくいっているのですが、これだとタイマーが0秒になったと同時にもう片方のレバーを下げると、先に下げていたレバーの方が一瞬だけ上がってしまいます。
おそらく0秒になった瞬間に先に押していた方のスイッチAが元に戻り、もう片方のスイッチBは下がるので、一瞬だけスイッチAが反応してレバーが上がるのだと思います。
これを反応させない方法はありますか?
説明が下手で申し訳ございません。
どなたかご助力いただければと思います。
よろしくお願いいたします。

長文失礼いたしました。
読みながら、(トリガーなど不明な条件は予想で)試しに作ってみましたが、「スイッチレバーA_2」を動作させる箇所がなく、情報が足りない気がします。

作ってみたサンプルデータを付けるので、こちらを新規プロジェクトのdataフォルダに入れて確認してください。

現状のものを直して添付していただければ、なにか分かるかも知れません。
 

Attachments

  • Map001.zip
    1.1 KB · 閲覧: 2

天照@61

ユーザー
ジェミニ様、munokura様、解答ありがとうございます。

ジェミニ様の方法でやってみましたが、自分の頭が悪く上手く作動することができませんでした。
そこで、munokura様のご指摘通り、新規プロジェクトで自分のやろうとしていることを編集してみて、それを添付しましたので、どこが悪いのかご教授いただければと思います。
今自分が組んでいるイベントの感じでやってみたので、テストプレイすればわかると思います。
0秒ピッタリにもう片方のレバーを操作すると、一瞬レバーが戻って、その後すぐに仕掛けを終えたことになってしまいます。
この一瞬のレバーが戻るのをなくしたいです。
説明が下手で本当に申し訳ございません。
ご教授いただければ幸いです。
 

Attachments

  • Map001.zip
    1.4 KB · 閲覧: 2

munokura

ユーザー
内容を拝見してジェミニ氏の案が妥当だと考えました。
現象が発生する原因は、複数の並列処理で共通の動作をさせようとしたために、タイムラグ(というか、処理順が発生する…同時に同じコマンドは動作しない…どう言ったら良いのやら)が起こることです。

で、ジェミニ氏の案で作成したのですが、本来の動作として「タイマーが0以下で止まる」条件であるので、0:01までに両方のスイッチを入れないと元に戻る仕組みになるようです。

サンプルを付けます。

自動実行と並列処理については、下記で検証しているように、結構複雑なので、同時に2つ以上を動かすと混乱の元です。

 

Attachments

  • Map001.zip
    1.2 KB · 閲覧: 3

munokura

ユーザー
横からすみません。
イベントの3ページ目のタイマー停止→スイッチONの順番にイベントが組まれていますが、このタイマー停止した時に0秒扱いになり2ページ目が一瞬起動しているようです。(多分)
なので、スイッチ6を先にONにしてから、タイマー停止すると正常に動作するはずです。
考慮・検証不足でしたか。
ご助言、痛み入ります…

と見返したら、自分の組んだイベントは2ページだったはず…と思って、2ページを見たら、そこですね!

と入れ替えてみましたが、変化が見られません。
何か勘違いしてるんでしょうか?

コード:
◆条件分岐:タイマー ≤ 0分0秒
  ◆スイッチの操作:#0004 スイッチA1 = OFF
  ◆スイッチの操作:#0005 スイッチA2 = OFF
  ◆スイッチの操作:#0007 タイマー開始 = OFF
  ◆タイマーの操作:停止
  ◆セルフスイッチの操作:A = OFF
  ◆
:分岐終了
◆条件分岐:スイッチA1がON
  ◆条件分岐:スイッチA2がON
    ◆スイッチの操作:#0006 レバー仕掛け作動 = ON
    ◆スイッチの操作:#0007 タイマー開始 = OFF
    ◆タイマーの操作:停止
    ◆セルフスイッチの操作:A = OFF
    ◆
  :分岐終了
  ◆
:分岐終了
 
最後に編集:

kurau

ユーザー
すみません、天照@61さんのイベントに対しての返信のつもりだったのですが
ちゃんと説明してなくて申し訳ないです。以後気を付けます…
そして、自分の出した案は希望の動作を満たしてませんでしたので前の記事を削除しておきます。
 
最後に編集:

天照@61

ユーザー
munokura様ありがとうございます。
もう一度、ジェミニ様の文章を見返してなんとか希望通りにすることができました。
ご助力いただいた皆様、ありがとうございました。
 
トップ