第三章:基本使用

在前面的章節中,我們已經了解了 Blockly 的基本概念,並完成了安裝與設置。本章將深入探討 Blockly 的基本使用方法,包括工作區介面、積木類型、工具箱配置、工作區配置以及主題設定等方面。

工作區介面

Blockly 工作區是使用者拖曳和連接積木的主要區域。它由以下幾個主要部分組成:

工具箱(Toolbox):位於工作區左側,包含可用的積木類別和積木。使用者可以從工具箱中拖曳積木到工作區。

積木區域:工作區的主要部分,使用者可以在這裡拖曳、連接和組織積木。

垃圾桶:位於工作區右下角,用於刪除不需要的積木。使用者可以將積木拖曳到垃圾桶中刪除,或者右鍵點擊積木選擇刪除選項。

縮放控制:位於工作區右下角,用於放大或縮小工作區視圖。

積木類型與使用

Blockly 提供了多種類型的積木,每種類型都有特定的形狀和功能。以下是一些常見的積木類型:

值積木(Value Blocks)

值積木用於表示數值、文字、布林值等數據。它們通常有圓角的外形,可以插入到其他積木的值輸入槽中。

例如,數字積木、文字積木、布林積木等都是值積木。

語句積木(Statement Blocks)

語句積木用於表示程式中的語句或指令。它們通常有上下連接點,可以垂直連接形成程式的執行流程。

例如,條件判斷積木、迴圈積木、函數定義積木等都是語句積木。

事件積木(Event Blocks)

事件積木用於響應特定事件,如點擊按鈕、按下鍵盤等。它們通常是程式的入口點,沒有上連接點,只有下連接點。

例如,「當程式啟動時」、「當按鈕被點擊時」等都是事件積木。

積木的連接與分離

使用者可以通過拖曳積木來連接或分離它們:

連接積木:將一個積木拖曳到另一個積木的連接點附近,當出現連接提示時,鬆開滑鼠即可連接。

分離積木:點擊並拖曳要分離的積木,將其從當前位置拖離即可。

複製積木:按住 Ctrl 鍵(Mac 上是 Cmd 鍵)並拖曳積木,可以創建該積木的副本。

工具箱配置

工具箱是 Blockly 工作區中包含所有可用積木的面板。您可以根據需要自定義工具箱的內容和外觀。

基本工具箱配置

工具箱可以通過 JSON 配置來定義。以下是一個基本的工具箱配置示例:

const toolbox = {
  kind: 'categoryToolbox',
  contents: [
    {
      kind: 'category',
      name: '邏輯',
      colour: '%{BKY_LOGIC_HUE}',
      contents: [
        {
          kind: 'block',
          type: 'controls_if'
        },
        {
          kind: 'block',
          type: 'logic_compare'
        },
        {
          kind: 'block',
          type: 'logic_operation'
        },
        {
          kind: 'block',
          type: 'logic_negate'
        },
        {
          kind: 'block',
          type: 'logic_boolean'
        }
      ]
    },
    {
      kind: 'category',
      name: '迴圈',
      colour: '%{BKY_LOOPS_HUE}',
      contents: [
        {
          kind: 'block',
          type: 'controls_repeat_ext'
        },
        {
          kind: 'block',
          type: 'controls_whileUntil'
        },
        {
          kind: 'block',
          type: 'controls_for'
        },
        {
          kind: 'block',
          type: 'controls_forEach'
        }
      ]
    },
    // 更多類別...
  ]
};

工具箱類型

Blockly 支援兩種類型的工具箱:

類別工具箱(Category Toolbox):將積木分組到不同的類別中,使用者可以點擊類別查看其中的積木。適合包含大量積木的情況。

簡單工具箱(Simple Toolbox):直接顯示所有積木,沒有分類。適合只有少量積木的簡單應用。

動態工具箱

您可以在運行時動態更新工具箱的內容:

// 獲取工作區
const workspace = Blockly.getMainWorkspace();

// 更新工具箱
const newToolboxConfig = {
  // 新的工具箱配置...
};

workspace.updateToolbox(newToolboxConfig);

工作區配置

除了工具箱外,您還可以配置工作區的其他方面,如網格、縮放、滾動條等。

網格設置

您可以配置工作區的網格,包括是否顯示網格、網格間距、網格顏色等:

const workspace = Blockly.inject('blocklyDiv', {
  toolbox: toolbox,
  grid: {
    spacing: 20,        // 網格間距
    length: 3,          // 網格線長度
    colour: '#ccc',     // 網格顏色
    snap: true          // 是否自動對齊網格
  }
});

縮放設置

您可以配置工作區的縮放功能,包括是否顯示縮放控制按鈕、是否啟用滾輪縮放、縮放範圍等:

const workspace = Blockly.inject('blocklyDiv', {
  toolbox: toolbox,
  zoom: {
    controls: true,      // 是否顯示縮放控制按鈕
    wheel: true,         // 是否啟用滾輪縮放
    startScale: 1.0,     // 初始縮放比例
    maxScale: 3,         // 最大縮放比例
    minScale: 0.3,       // 最小縮放比例
    scaleSpeed: 1.2      // 縮放速度
  }
});

其他配置選項

Blockly 還提供了許多其他配置選項,如:

trashcan:是否顯示垃圾桶圖標。

scrollbars:是否顯示滾動條。

sounds:是否啟用音效。

readOnly:是否為只讀模式(不允許編輯)。

const workspace = Blockly.inject('blocklyDiv', {
  toolbox: toolbox,
  trashcan: true,       // 顯示垃圾桶
  scrollbars: true,     // 顯示滾動條
  sounds: true,         // 啟用音效
  readOnly: false       // 非只讀模式
});

主題設定

Blockly 允許您自定義工作區的視覺外觀,包括積木顏色、字體、間距等。

使用內建主題

Blockly 提供了一些內建的主題,如默認主題、高對比度主題等:

// 使用高對比度主題
const workspace = Blockly.inject('blocklyDiv', {
  toolbox: toolbox,
  theme: Blockly.Themes.HighContrast
});

創建自定義主題

您也可以創建自己的主題,自定義各種視覺元素:

// 定義自定義主題
const customTheme = Blockly.Theme.defineTheme('customTheme', {
  'base': Blockly.Themes.Classic,
  'componentStyles': {
    'workspaceBackgroundColour': '#1e1e1e',
    'toolboxBackgroundColour': '#333',
    'toolboxForegroundColour': '#fff',
    'flyoutBackgroundColour': '#252526',
    'flyoutForegroundColour': '#ccc',
    'flyoutOpacity': 1,
    'scrollbarColour': '#797979',
    'insertionMarkerColour': '#fff',
    'insertionMarkerOpacity': 0.3,
    'scrollbarOpacity': 0.4,
    'cursorColour': '#d0d0d0',
  },
  'blockStyles': {
    'logic_blocks': {
      'colourPrimary': '#5b80a5',
      'colourSecondary': '#496684',
      'colourTertiary': '#374e64',
    },
    'loop_blocks': {
      'colourPrimary': '#5ba55b',
      'colourSecondary': '#468446',
      'colourTertiary': '#346334',
    },
    'math_blocks': {
      'colourPrimary': '#5b67a5',
      'colourSecondary': '#465a84',
      'colourTertiary': '#344564',
    },
    'text_blocks': {
      'colourPrimary': '#5ba58c',
      'colourSecondary': '#46846e',
      'colourTertiary': '#346353',
    },
    'variable_blocks': {
      'colourPrimary': '#a55b5b',
      'colourSecondary': '#844646',
      'colourTertiary': '#633434',
    },
    'procedure_blocks': {
      'colourPrimary': '#995ba5',
      'colourSecondary': '#774684',
      'colourTertiary': '#573464',
    },
  },
  'categoryStyles': {
    'logic_category': {
      'colour': '#5b80a5',
    },
    'loops_category': {
      'colour': '#5ba55b',
    },
    'math_category': {
      'colour': '#5b67a5',
    },
    'text_category': {
      'colour': '#5ba58c',
    },
    'variables_category': {
      'colour': '#a55b5b',
    },
    'procedures_category': {
      'colour': '#995ba5',
    },
  },
});

// 使用自定義主題
const workspace = Blockly.inject('blocklyDiv', {
  toolbox: toolbox,
  theme: customTheme
});

動態切換主題

您可以在運行時動態切換工作區的主題:

// 獲取工作區
const workspace = Blockly.getMainWorkspace();

// 切換到高對比度主題
workspace.setTheme(Blockly.Themes.HighContrast);

// 切換到自定義主題
workspace.setTheme(customTheme);

在本章中,我們探討了 Blockly 的基本使用方法,包括工作區介面、積木類型、工具箱配置、工作區配置以及主題設定等方面。掌握這些基本知識後,您就可以開始使用 Blockly 創建自己的視覺化程式設計環境了。

在下一章中,我們將學習如何創建自定義積木,以擴展 Blockly 的功能,滿足特定的應用需求。