参考:「Scratchに外から値を送ってみた」by いー ドット ぷりんとすったくとれーす さん
これを有効にするには、例によって「[スライダー▼]センサーの値」ブロックを長押しして現れる以下のメニュー
で「遠隔センサー接続を有効にする」を選択する。と、画面中央にこんなダイアログ
が出て、Scratchが42001番ポートをlistenするようになる。
フォーマットは単純な文字列(UTF-8エンコード)なのだが、その前に32bit幅のデータ長をペイロードとしてつけてやる必要がある。
通信は、以下のコマンドが定義されているので、それを文字列の最初に置く(大文字小文字区別なし、コマンドと引数の間は空白文字0x20)。
- broadcast
- update-sensor
update-sensor "X軸傾き" 20 "Y軸傾き" -120 "Z軸傾き" 45
すると、これを受け取ったScratchは3つのセンサーに対応する変数「X軸傾き」「Y軸傾き」「Z軸傾き」を内部に作成し、値をそれぞれ20, -120, 45にする。値が数値の場合は10進数、文字列の場合はダブルクォート(")で囲む、真偽値の場合は直接trueまたはfalseと書く。また、上の例のように複数の変数の値をいちどに変更することができる。
使い方としては、まず「update-sensor」で値を送っておいて、「broadcast」で指示を送る。Scratchのブロックで、「[ ▼]を受け取ったとき」というもの
があるが、この下に、受け取った値を使って処理すべきことを書くことになる。例えば、
broadcast "移動"というメッセージが外から送られてきたら、対応するスプライトをさきほどのX, Y, Zの傾きにしたがってすべるような移動をさせる、という感じ。
Scratchは、メッセージを使うことでイベント駆動のようなプログラムを作ることができる。だから、Wiimoteのボタンを押したら何かが起きる、といったスクリプトを作成するのは簡単だ。
一方ドリトルは、メッセージを監視するような機能を持たないので、例えばタイマーなどを使ってポーリングすることになる。それでもよければ、サーバ機能をオンにしたドリトルを立てておけば、そこが共有黒板になるので、Scratchと同じような形で値の受け渡しやコマンド送信ができるだろう。ScratchはP2Pで直接通信できるのに対して、ドリトルはサーバを介する必要がある点が異なる。