おはようございます、こんにちは、こんばんは!
管理人のゆーです<(_ _)>
#9にてT型フリップフロップ回路を使った隠し部屋をご紹介しました。
ドロッパーを使ったT型フリップフロップ回路を作るにあたって、Java版では上手く動作しない作り方があったのです。
色々調べてみた結果、Java版特有の準接続のせいではないかなーという考えに至りました。
また、#4で自動回収養蜂場を作った際にも、準接続が起こってディスペンサーが連射できないパターンをご紹介しました。
今回は、準接続のせいでドロッパーやディスペンサーが連続で動作してくれなかった事例のご紹介と、どのように信号が流れて準接続が起こったのか、詳細に書いてみたいと思います。
自分の備忘録も兼ねて(;^ω^)
準接続とは
「ドロッパーやディスペンサー、ピストン、粘着ピストンといった機械部品について、その部品の真上のブロック(空を含む)に動力が与えられているときに、ブロック更新を検知する仕組み」と言えば正しいでしょうか...。
例えば、ピストンの場合。
ピストンの2マス上にレッドストーンブロックを設置しているため、ピストンの真上に動力が与えられています。
でもピストンに直接動力が与えられているわけでは無いので、ピストンは動作していませんよね。
この状態で、ピストンの横にブロックを置いてみます。
ブロック更新を検知して、ピストンが動きました。
ピストンの真上に動力が与えられている間、再度ブロック更新を検知することはできません。
上の画像の状態から、石ブロック→レッドストーンブロックの順に壊すと、なんとピストンは元に戻りません。
この時、レッドストーンブロックを壊した(準接続を解除した)ので、ピストンの真上に動力が与えられていない状態になっています。
そして再度ブロックを隣に置くと、ブロック更新を検知してピストンがもとに戻ります。
準接続を解除した状態で再度ブロック更新を検知しないと、ピストンは再度準接続によるブロック更新の検知をしません。
この他にも、以下のような動力の伝え方がされているときも、準接続は起こります。
ドロッパーやディスペンサーが連続で動作してくれなかった事例
T型フリップフロップ回路
#9にてT型フリップフロップ回路を作ったのですが、「どのような作りにしようか...」と悩んでいる過程で、以下の回路は(Java版では)上手く動作してくれないことがわかりました。
ドロッパーは出力口が向かい合うように置いています。
画像の状態では、下のドロッパーにアイテムが入っているため、コンパレーターの先に動力が伝わり、ランプが点いています。
統合版の場合の動作(期待する動作のとおり動く)
準接続が起こらない統合版の場合は、以下のような流れになるかと思います。
- ボタンを押す
- 下のドロッパーが稼働し、下のドロッパー内のアイテムが上に移動する
- 下のドロッパー内のアイテムが消えたので、ランプが消える
- もう一度ボタンを押す
- 下のドロッパーに動力が伝わる(アイテムが入っていないので空打ち)
- 下のドロッパーが動力源ブロックになり、隣接している上のドロッパーが稼働する
- 上のドロッパー内のアイテムが、下のドロッパーに移動する
- 動力が伝わり、ランプが点く
Java版の場合の動作(準接続が起こっている)
以下の画像の状態で、もう既に準接続が起こる条件が揃っています。
下のドロッパーにアイテムが入っているため、コンパレーターとレッドストーンダストを通して(コンパレーターの上のブロックが動力源ブロックになり)、上のドロッパーに動力が伝わっている状態です。
これって、先ほど記載した接続が起こる以下の条件
「ドロッパーやディスペンサー、ピストン、粘着ピストンといった機械部品について、その部品の真上のブロック(空を含む)に動力が与えられているとき」
を満たしています。
1回目、ボタンを押すと、下のドロッパーの隣に置いたレッドストーンダストに動力が伝わります。
これをドロッパーがブロック更新として検知することで、ドロッパーが稼働します。
(信号のON、OFFもブロック更新になるみたいですね。)
ボタンによる動力もドロッパーに伝わりますが、おそらく準接続によるドロッパーの稼働とほぼ同時のため、ドロッパーは一度しか稼働していないように思われます。
準接続が起こっているとは言え、下のドロッパーが稼働することでアイテムは上のドロッパーに移動するため、ランプは消えました。
2回目、ボタンを押すと、上のドロッパー内のアイテムが下のドロッパーに移動し、再度ランプが点きます。
何やら正しい動きをしているように思えますが、これ以降正しく動作しなくなります。
ボタンを押しても、下のドロッパーがうんともすんとも言いません。
多分ですが、2回目のボタンを押したとき(アイテムを上のドロッパーから下に移動するとき)に以下のような問題があるのかと思います。
- 2回目のボタンを押す
- 下のドロッパーが動力源ブロックになり、上のドロッパーが稼働する
- 上のドロッパー内のアイテムが下のドロッパーに移動する
- 下のドロッパーから動力が発生し、準接続が起こる条件が成立
- ボタンがOFFになることで、下のドロッパーに隣接しているレッドストーンがOFFになったことを下のドロッパーがブロック更新として検知する(準接続が起こった)
一度準接続によるブロック更新の検知が起こったので、準接続を解除するまでは、下のドロッパーは動かなくなる...という理屈なのではないかと考えました。
解決法
上記の考えが正しいとすると、上に記載したような問題が起こるのは、ボタンが押されてからOFFになるまでに数秒かかることです。
ドロッパーに伝える動力が一瞬なら、このような不具合は起こらないのではないか...と思い、ボタンではなく、一瞬だけ信号を送れるオブザーバーで動力を与えてみました。
オブザーバーの前のピストンを動かすごとに、ドロッパーに動力が伝わります。
案の定、この回路はT型フリップフロップ回路としてちゃんと動作してくれました。
自動回収養蜂場で使った回路
#4では、以下のような回路を使いました。
クロック回路で、ディスペンサーが連射するようにしています。
画像で示した部分には、透過ブロックであるハーフブロックを使っているので、準接続は起こりません。
仮にここを以下の画像のように、不透過ブロックを使うと準接続が起こります。
クロック回路を繋いでもディスペンサーは連射してくれず、最初の1回しか動きません。
「準接続とは」で記載しましたが、準接続を解除した状態で再度ブロック更新を検知することで、2回目の準接続によるブロック更新の検知ができるからです。
準接続によるブロック更新の検知を繰り返しているだけなので、最初の1回しか検知しないのだと思われます。
最後に
ちょっと長くなってしまいました(;^ω^)
「準接続って何?!」と思われてる方や、「ドロッパーやディスペンサーが連続で動作しないんだけどどうして?」と悩まれてる方のお役に立ててましたら幸いです(^^♪
最後まで見ていただきありがとうございました<(_ _)>