提供: Japanese Scratch-Wiki

< Scratch 3.0の拡張機能を作ってみよう

このきじは ひらがなのページがありません。ごめんなさい。

自分の拡張機能はできたかな。以下は応用編だ。

自力でチャレンジ

  • 大文字小文字を区別するイコールの真偽ブロック
  • 累乗

ウェブサイトの情報を取得する

get [URL]という名前の値ブロックをつくってみよう。URLは文字列だ。オペコードは「ajaxRequest」とする。ブロック定義は前のチュートリアルを参考にしてほしいので、ここには書かない。

これには一つライブラリを使用する必要がある。以下を追加する。

5 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;
    }
}