ScratchXの使い方(3)
以前のScratchXの解説で、拡張用スクリプトを読み込むための準備と、スクリプトの構成について触れました。
ScratchXの使い方
ScratchXの使い方(2)
今回は、サンプルのスクリプトで、実際の拡張用ブロックのスクリプトの中身について解説したいと思います。
引数を持たないレポーターブロック
レポーターブロックは、角丸のブロックで、何らかの値を返すブロックのことを指します。
レポーターブロックの中にも、引数を持つものと持たないものがあります。
Scratchの「x座標」や「答え」などは引数を持たないもので、乱数のブロック(1から10までの乱数なら、1と10が引数になります)などが引数を持つものです。
まず最初に、一番簡単な、引数を持たないレポーターブロックを作成してみましょう。
円周率を返す「π」というブロックを作ってみたいと思います。
関数の名前を、『円周率を取得する』という意味で、「getPI」にしたいと思います。
前回解説した通り、ext.xxxxx(任意の名前)という形で定義し、レポーターブロックは返り値がありますのでそれをcallbackとして、
1 |
ext.getPI = function(callback) |
というように定義します。
この関数の内容ですが、JavaScriptでは、円周率を「Math.PI」で返却してくれます。これをそのままcallbackで返却すればいいです。
なので、
1 2 3 |
ext.getPI = function(callback) { callback(Math.PI); }; |
というようになります。
あとは、作成したfunctionをブロックとして定義します。
ブロックの定義は、以下のようになちます。
1 2 3 4 5 |
var descriptor = { blocks: [ ['R', 'π', 'getPI'], ] }; |
配列の1番目は、ブロックのタイプを定義します。
これは前回解説しましたが、今回はレポーターブロックなので「R」にしました。そして2番目は、実際にブロックに表示される文言です。最後3番目は、functionの名前となります。
こうして作成した拡張ファイルをScratchXで読み込むと、
「π」のブロックが追加されました。
このブロックが返す値を表示してみると、
このように「3.14」と表示されました。
数値の引数を持つレポーターブロック
今度は何か引数を渡して、それを元に値を返すレポーターブロックを作成してみましょう。
Scratchには、指定した数値の「平方根」を返すブロックがありますので、
同じように、指定した数値の「立方根」を返すブロックを作ってみます。
今度は、functionに数値の引数を渡してあげる必要があるので、
1 |
ext.getCbrt = function(num, callback) |
のように、引数(num)と返り値(callback)を指定します。
立方根も、JavaScriptではMathオブジェクトのcbrtメソッドで提供されています。
これを使って、
1 2 3 |
ext.getCbrt = function(num, callback) { callback(Math.cbrt(num)); }; |
というように組んでみました。
そして、descriptorでの定義です。
1 |
['R', '%n の立方根', 'getCbrt', 8], |
配列の2番目、ブロック表記の定義に記した「%n」というのが数値を指定する部分になります。
そして、先ほどの「π」のブロックと異なり、今回は配列の4番目の定義もしています。
これは引数に当たる部分、つまり今回の「%n」の部分の初期表示値です。
この4番目の指定を行わない場合は、引数の部分の初期表示値はなしになります。
この拡張ファイルを読み込むと、
「立方根」のブロックも追加されました。引数部分の初期表示には「8」が設定されています。
このブロックの返す値を確認してみると、
「8」の立方根である「2」が返ってきています。
今回は、シンプルなスクリプトでしたが、これで色々なブロックを作っていきたいと思います。
ScratchXの使い方のドキュメントはコチラです。
https://github.com/LLK/scratchx/wiki