提供:Japanese Scratch-Wiki
自分の拡張機能はできたかな。以下は応用編だ。
自力でチャレンジ
- 大文字小文字を区別するイコールの真偽ブロック
- 累乗
ウェブサイトの情報を取得する
get [URL]という名前の値ブロックをつくってみよう。URLは文字列だ。オペコードは「ajaxRequest」とする。ブロック定義は前のチュートリアルを参考にしてほしいので、ここには書かない。
これには一つライブラリを使用する必要がある。以下を追加する。
const nets = require('nets');
では、リクエスト部を書いてみよう。
ajaxRequest (args){
const ajaxPromise = new Promise(resolve => {
nets({
url: Cast.toString(args.URL)
}, function(err, res, body){
resolve(body);
return body;
});
});
return ajaxPromise;
}
netsは、XMLHttpRequest用のライブラリと思えばいい。また、似たコードが翻訳拡張機能にもある。見てみよう。
現在のミリ秒
現在のミリ秒はnew Date().getMilliseconds()
で取得できる。現在のミリ秒を返すブロックを作ってみよう。
() とき
ハットブロックを作ってみよう。ハットブロックは、条件によって実行されるものと、関数の呼び出しによって実行されるものがある。条件駆動型のハットブロックを作るには、関数の返り値にtrue/falseを指定し、またgetInfo内でisEdgeActivated: true
と書く。以下は指定した条件が整った時に実行するハットブロックのコードである:
whenCondition (args) {
return Cast.toBoolean(args.CONDITION);
}
getInfo側:
{
opcode: "whenCondition",
blockType: BlockType.HAT,
text: "when [CONDITION]",
arguments: {
CONDITION: {
type: ArgumentType.BOOLEAN,
defaultValue: false
}
},
isEdgeActivated: true
}
一方、関数の呼び出しによって実行されるハットブロックを作る場合は、コード内は何も書かない。その代わり、呼び出すときに以下のようなコードを使う:
block (args, util) {
// とあるブロックの動作
util.startHats("hatBlockOpcode");
}
JSONを読み込む
Scratchには、XMLなどのマークアップ言語/データ記述言語を標準で読み込む機能がない。ここでは、JSONを読み込む機能を作る。「[JSONDATA]を読んで[KEY]を返す」だ。
たとえば、{"hoge":[1, 4, 9], "fuga": "PiYo"}
というデータでキーを「fuga」にすると、PiYoが返る。hogeを指定すると、[1, 4, 9]というデータが返る。もう一回このブロックに通し、キーを数値にすれば、配列の中の参照ができる。下のコードを参考にしてほしい。
parseJSON (args) {
let j = JSON.parse(Cast.toString(args.JSONDATA));
// 一部の引数でのバグを防止するため。
j = Object.assign(Object.create(null), j);
const val = j[Cast.toString(args.KEY)];
if (typeof val == "object") {
return JSON.stringify(val);
} else {
return val;
}
}