角度欄位

角度欄位會將數字儲存為數字,並將字串儲存為文字。這個值是介於 0 到 360 之間的數字 (這個範圍可以變更),而其文字可以是在編輯器中輸入的任何字串。

角度欄位

含有編輯器的角度欄位

收合角度欄位

創作風潮

JSON

{
  "type": "example_angle",
  "message0": "angle: %1",
  "args0": [
    {
      "type": "field_angle",
      "name": "FIELDNAME",
      "angle": 90
    }
  ]
}

JavaScript

Blockly.Blocks['example_angle'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('angle:')
        .appendField(new Blockly.FieldAngle(90), 'FIELDNAME');
  }
};

角度建構函式會採用選用值和選用的validator。如未指定任何值,或指定的值未轉換為數字,系統會使用零做為預設值。

序列化

JSON

角度欄位的 JSON 如下所示:

{
  "fields": {
    "FIELDNAME": 0
  }
}

其中 FIELDNAME 是參照角度欄位的字串,值是套用至該欄位的值。這個值遵循與建構函式值相同的規則。

XML

角度欄位的 XML 如下所示:

<field name="FIELDNAME">0</field>

其中 name 屬性包含參照角度欄位的字串,內部文字是套用至該欄位的值。內部文字值遵循與建構函式值相同的規則。

自訂

貼齊

Blockly.FieldAngle.ROUND 屬性會將角度挑選器「snaps」的值變更為使用滑鼠時的值。

以下是 ROUND 值為 70 的範例:

ROUND 值為 70 的角度欄位

ROUND 屬性預設為 15。如要停用貼齊功能,請設為 0。

這是全域屬性,因此會在設定時修改所有角度欄位。

通行方向

Blockly.FieldAngle.CLOCKWISE 屬性會變更方向,讓角度值增加。如果將這個值設為 true,當選取器順時針移動時,角度會增加,設為 false 則會在逆時針移動角度增加角度。

將「CLOCKWISE」設為 true

CLOCKWISE 設為 true 的角度欄位

CLOCKWISE 已設為 false

CLOCKWISE 設為 false 的角度欄位

CLOCKWISE 屬性預設為 false,表示逆時針動作會增加角度。

這是全域屬性,因此會在設定時修改所有角度欄位。

零位置

Blockly.FieldAngle.OFFSET 屬性會設定 0 度的位置。根據預設,零度會與正 x 軸 (往右) 對齊,然後此屬性以一定度數「偏移」。

右側角度挑選器為零

頂端角度挑選器 0

OFFSET 屬性預設為 0,表示零度與正 X 軸對齊。

這是全域屬性,因此會在設定時修改所有角度欄位。

範圍

Blockly.FieldAngle.WRAP 屬性會設定值的範圍。值的範圍等於 (-360 + WRAP, WRAP)。也就是說,WRAP 值 360 會得到 (0, 359.9) 的範圍,WRAP 值則是 (-179.9, 180)

包裝值為 180 的角挑選器

WRAP 屬性預設為 360,表示欄位的範圍是 (0, 359.9)

這是全域屬性,因此會在設定時修改所有角度欄位。

角度挑選器大小

Blockly.FieldAngle.HALF 屬性會變更角度挑選器的大小。這個值會定義外部圓形的半徑 (以像素為單位)。

含有預設編輯器大小的切換挑選器

含有大型編輯器的切換工具

HALF 屬性預設為 50。

這是全域屬性,因此會在設定時修改所有角度欄位。

常見模式

您可以搭配使用方向 零位置,創造一些有趣的組合。以下是兩種常見的做法:

量角器

0 度右側,上升 90 度。

Blockly.FieldAngle.CLOCKWISE = false;
Blockly.FieldAngle.OFFSET = 0;

將角挑選器設為變形器

指南針

0 度上升,右側為 90 度。

Blockly.FieldAngle.CLOCKWISE = true;
Blockly.FieldAngle.OFFSET = 90;

設為指南針的角度挑選器

建立角度驗證工具

角度欄位的值是數字,因此所有驗證工具都必須接受數字並傳回數字、nullundefined

以下是強制將該值設為 30 的倍數的驗證工具範例:

function(newValue) {
    return Math.round(newValue / 30) * 30;
}

包含驗證工具的切換器

請注意,角度欄位的 [ROUND](#snapping) 屬性仍設為 15,因此欄位的圖形元素會顯示 15 的倍數,而非 30。