Scratch3.0 二次开发:让超长积木在积木选区翩翩起舞!
2023-12-14 21:58:13
释放 Scratch 的潜力:解决超长积木块的难题
Scratch 以其亲切的界面和强大的功能风靡全球,成为编程教育界的宠儿。然而,随着其应用的日益广泛,原本的设计逐渐无法满足开发者不断增长的需求。二次开发应运而生,赋予开发者定制和扩展 Scratch 功能的强大工具。
超长积木块的尴尬
在 Scratch 的积木选择区(flyout),积木块的大小受到限制。当积木内容较长时,就会被无情截断,只显示部分内容。对于开发者来说,这无疑是阻碍,特别是当积木块包含关键信息时。
解药:让积木自由舒展
为了解决这个痛点,本文将指导你修改 scratch-blocks 库,使其在积木选择区显示超长积木块。
一、引入 flyoutAdjustments.js
在 scratch-blocks 库的 core 目录中,新建一个名为 flyoutAdjustments.js 的文件。
二、扩展 flyout 的高度
在 flyoutAdjustments.js 文件中,添加以下代码:
Blockly.Flyout.prototype.auto_adjust_ = function() {
let expected_height = 0;
for (let i = 0; i < this.workspace_.getTopBlocks().length; i++) {
const block_height = Blockly.blockRendering.ConstantProvider.prototype.MAX_BOTTOM_HEIGHT;
if (block_height > expected_height) {
expected_height = block_height;
}
}
// 将预估高度设置到flyout
this.height_ = expected_height;
// 设置新的flyout高度
this.svgGroup_.setAttribute('height', expected_height);
this.svgBackground_.setAttribute('height', expected_height);
};
此代码根据积木块的高度动态调整 flyout 的高度,确保超长积木块也能完整显示。
三、注册扩展
在 scratch-blocks 库的 index.js 文件中,添加以下代码注册扩展:
import flyoutAdjustments from './core/flyoutAdjustments.js';
Blockly.registry.register(Blockly.registry.Type.FLYOUT_CONFIG, 'flyout_adjustments', flyoutAdjustments);
验证效果
完成以上步骤后,重新编译 scratch-blocks 库并将其引入 Scratch 项目。新建一个项目,在积木选择区添加一个超长积木块,你会欣喜地发现它终于可以完整显示了!
结语
通过修改 scratch-blocks 库,我们成功地拓展了 Scratch 3.0 的功能,使其支持在积木选择区显示超长积木块。这为开发者带来了极大的便利,使他们能够更灵活地使用 Scratch 开发各种项目。未来,我们将继续探索 Scratch 的二次开发,为开发者提供更多强大的工具,让 Scratch 成为编程教育领域的璀璨明珠。
常见问题解答
-
Q:修改 scratch-blocks 库是否会影响其他功能?
- A:不会。该修改只影响积木选择区的显示,不会对其他功能造成影响。
-
Q:是否需要重新编译整个 Scratch 应用程序?
- A:不需要。只需重新编译修改过的 scratch-blocks 库即可。
-
Q:此方法是否适用于所有版本?
- A:此方法适用于 Scratch 3.0 及更高版本。
-
Q:是否存在其他方法来解决这个问题?
- A:是的,可以通过 CSS 修改来调整积木选择区的宽度,但这可能会影响其他功能的显示。
-
Q:此方法是否支持自定义积木块?
- A:是的,此方法支持自定义积木块和标准积木块。