【Google Blocklyを使って遊ぼう】colour_blocks.jsonのブロック
Blocklyに最初から組み込まれているブロックが沢山あります。
今回はcolour_blocks.jsonのブロック に定義されているブロックについて説明します。
このファイルには色に関するブロックが定義されています。
colour_picker
colour_pickerは色を選択するピッカーを表示するブロックです。このブロックには出力端子が存在し、選択した色のカラーコードが出力されます。
colour_pickerの定義
{
"type": "colour_picker",
"message0": "%1",
"args0": [
{
"type": "field_colour",
"name": "COLOUR",
"colour": "#ff0000"
}
],
"output": "Colour",
"colour": 20,
"tooltip": "Choose a colour from the palette.",
"helpUrl": "https://en.wikipedia.org/wiki/Color"
}
colour_pickerの生成コード
[出力端子] = '[選択した色のカラーコード]';
colour_random
colour_randomは色はランダムに取得するブロックです。このブロックには出力端子が存在し、選択した色のカラーコードが出力されます。
colour_randomの定義
{
"type": "colour_random",
"message0": "random colour",
"args0": [],
"output": null,
"colour": 20,
"tooltip": "Choose a colour at random.",
"helpUrl": "http://randomcolour.com"
}
colour_randomの生成コード
function colourRandom() {
var num = Math.floor(Math.random() * Math.pow(2, 24));
return '#' + ('00000' + num.toString(16)).substr(-6);
}
[出力端子] = colourRandom();
colour_rgb
colour_rgbは色を構成するRGBを指定して色を作成するブロックです。このブロックには3つの入力端子があります、1つ目の入力端子でR、2つ目の入力端子でG、3つ目の入力端子でBを指定します。
各値は0~100の間で値を設定し、指定しない場合は0、101以上の場合は100が設定されます。
このブロックには出力端子が存在し、作成した色のカラーコードが出力されます。
colour_rgbの定義
{
"type": "colour_rgb",
"message0": "colour with red %1 green %2 blue %3",
"args0": [
{
"type": "input_value",
"name": "RED",
"check": "Number",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "GREEN",
"check": "Number",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "BLUE",
"check": "Number",
"align": "RIGHT"
}
],
"output": "Colour",
"colour": 20,
"tooltip": "Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.",
"helpUrl": "http://www.december.com/html/spec/colorper.html"
}
colour_rgbの生成コード
function colourRgb(r, g, b) {
r = Math.max(Math.min(Number(r), 100), 0) * 2.55;
g = Math.max(Math.min(Number(g), 100), 0) * 2.55;
b = Math.max(Math.min(Number(b), 100), 0) * 2.55;
r = ('0' + (Math.round(r) || 0).toString(16)).slice(-2);
g = ('0' + (Math.round(g) || 0).toString(16)).slice(-2);
b = ('0' + (Math.round(b) || 0).toString(16)).slice(-2);
return '#' + r + g + b;
}
[出力端子] = colourRgb([1つ目の入力端子], [2つ目の入力端子], [3つ目の入力端子]);
colour_blend
colour_blendは色を合成するブロックです。このブロックには3つの入力端子があります、1つ目の入力端子で色1を指定し 、2つ目の入力端子で色2を指定します、3つ目の入力端子で合成した色の中での色2の割合を指定します。
このブロックには出力端子が存在し、合成した色のカラーコードが出力されます。
colour_blendの定義
{
"type": "colour_blend",
"message0": "blend colour 1 %1 colour 2 %2 ratio %3",
"args0": [
{
"type": "input_value",
"name": "COLOUR1",
"check": "Colour",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "COLOUR2",
"check": "Colour",
"align": "RIGHT"
},
{
"type": "input_value",
"name": "RATIO",
"check": "Number",
"align": "RIGHT"
}
],
"output": null,
"colour": 20,
"tooltip": "Blends two colours together with a given ratio (0.0 - 1.0).",
"helpUrl": "http://meyerweb.com/eric/tools/color-blend/"
}
colour_blendの生成コード
function colourBlend(c1, c2, ratio) {
ratio = Math.max(Math.min(Number(ratio), 1), 0);
var r1 = parseInt(c1.substring(1, 3), 16);
var g1 = parseInt(c1.substring(3, 5), 16);
var b1 = parseInt(c1.substring(5, 7), 16);
var r2 = parseInt(c2.substring(1, 3), 16);
var g2 = parseInt(c2.substring(3, 5), 16);
var b2 = parseInt(c2.substring(5, 7), 16);
var r = Math.round(r1 * (1 - ratio) + r2 * ratio);
var g = Math.round(g1 * (1 - ratio) + g2 * ratio);
var b = Math.round(b1 * (1 - ratio) + b2 * ratio);
r = ('0' + (r || 0).toString(16)).slice(-2);
g = ('0' + (g || 0).toString(16)).slice(-2);
b = ('0' + (b || 0).toString(16)).slice(-2);
return '#' + r + g + b;
}
[出力端子] = colourBlend([1つ目の入力端子], [2つ目の入力端子], [3つ目の入力端子]);