这里展示了一个十分简单的制作TurboWarp扩展的方法。制作一个较为基础的扩展是比较简单(额,我也不会JS)的……
目录
制作步骤
1. 准备模板
以下就是模板了。
class MyExt{//可以自己改,但要符合标准(大小写半角字母,阿拉伯半角数字,半角下划线,开头不可以有数字)
getInfo(){//这是模板,只能这么写,不然不会识别
return {
id: 'Myid',//可以自己改,但一开始就确定,并且符合标准,以后更新代码时不再改动,否则无法识别,导致崩溃
name: '工具',//在左边显示的插件名称,可以包括中文
color1:'#00FF00',//代码块颜色,可以添加3个,分别是color1,color2,color3,也可以不写
blocks:[
//TODO: 在这里定义积木块
{
opcode: 'n',//可以自己改,对应执行的函数名称
blockType: Scratch.BlockType.REPORTER,//下面会讲到
text: '换行',//积木块的名称,' [A] '表示输入的参数,后面会讲到(如果还要载入下一个积木,在text末尾和'{}'末尾加上',',否则不加)
},
{
opcode: 'inf',
blockType: Scratch.BlockType.REPORTER,
text: '∞'
}
],
};
}
//TODO: 在这里定义函数
n() {
return '\n';//这个是返回的值
}
inf() {
return 1/0;
}
}
Scratch.extensions.register(new MyExt()/*这个必须和第一行的class一样*/);
效果差不多就这样:
2. 基本格式
上面的代码中已经呈现了一种基本格式,以下为blockType可以接受的值。
值 | 描述 |
---|---|
Scratch.BlockType.COMMAND | 不会报告值的积木块。 |
Scratch.BlockType.REPORTER | 报告字符串、数字的积木块。 |
Scratch.BlockType.BOOLEAN | 报告布尔值(true/false)的积木块。 |
其它 | 请见原介绍…… |
但是,有些时候我们需要输入一些参数……那该怎么办呢?其实,我们可以在text内添加像' [A] ' ' [B] '之类的东西。这些就是参数了。
下面的代码展示了一个传参实例。
class StrictEqualityExtension {
getInfo() {
return {
id: 'strictequalityexample',
name: 'Strict Equality',
blocks: [
{
opcode: 'strictlyEquals',
blockType: Scratch.BlockType.BOOLEAN,
text: '[ONE] 严格= [TWO]',
arguments: {
ONE: {
type: Scratch.ArgumentType.STRING,//一个输入,下面会讲到
defaultValue: '01'//默认值,但注意布尔值是没有默认值的
},
TWO: {
type: Scratch.ArgumentType.STRING,//同上
defaultValue: '1'
}
}
}
]
};
}
strictlyEquals(args) {
return args.ONE === args.TWO;//判断,返回,这里'==='代表严格平等
}
/*以上'strictlyEquals(args) {}'部分也可以使用以下部分
strictlyEquals({ONE, TWO}) {
return ONE === TWO;//这里不用加'args.'
}
*/
}
Scratch.extensions.register(new StrictEqualityExtension());
效果差不多就这样:
上面的代码展示了一个传参实例,以下为argements内type可以接受的值。
值 | 描述 |
---|---|
Scratch.ArgumentType.STRING | 字符串。 |
Scratch.ArgumentType.NUMBER | 数字。 |
Scratch.ArgumentType.BOOLEAN | 布尔值(true/false),没有默认值。 |
Scratch.ArgumentType.COLOR | 颜色,返回为十六进制颜色代码。 |
Scratch.ArgumentType.ANGLE | 角度。 |
Scratch.ArgumentType.MATRIX | 以二进制表示的5×5矩阵。 |
Scratch.ArgumentType.NOTE | 钢琴键盘上的音符。 |
Scratch.ArgumentType.SOUND | 这个角色存储的声音。 |
其它 | 请见原介绍…… |
3. 实际操作
下面我制作了一个简单的扩展,十分好用。
class Box {
getInfo() {
return {
id: 'box',
name: '我只是一个工具盒子啊',
blocks: [
{
opcode: 'endl',
blockType: Scratch.BlockType.REPORTER,
text: '\\n',
},
{
opcode: 'tab',
blockType: Scratch.BlockType.REPORTER,
text: '\\t',
},
{
opcode: 'pi',
blockType: Scratch.BlockType.REPORTER,
text: 'π',
},
{
opcode: 'inf',
blockType: Scratch.BlockType.REPORTER,
text: '∞',
},
{
opcode: 'equals',
blockType: Scratch.BlockType.BOOLEAN,
text: '[ONE] 严格 = [TWO]',
arguments: {
ONE: {
type: Scratch.ArgumentType.STRING,
defaultValue: 'A'
},
TWO: {
type: Scratch.ArgumentType.STRING,
defaultValue: 'a'
}
}
}
]
};
}
endl() {
return '\n';
}
tab() {
return '\t';
}
pi() {
return 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196;
}
inf() {
return 1/0;
}
equals(args) {
return args.ONE === args.TWO;
}
}
Scratch.extensions.register(new Box());
效果差不多就这样:
本文接近尾声,想要了解更多,就进入原网页了解更多。
再见!