0. 前言
Scratch是麻省理工(下称MIT)开发的图形化编程工具。这款工具曾是笔者所热衷的软件,曾陆续使用其开发出一些小作品并获得一些小奖项
但是,在对计算机有更多了解后,笔者发现绝大多数格式文件本质都是压缩包(docx,pptx)或文本,那么Scratch专属sb3格式是否也是如此呢
【资料图】
1. 探索
首先,我们启动 Scratch 3.29.1
尝试保存一个空项目,用记事本打开
打开一片乱码,那么显然,我们的方式不对,但是
这里出现两个文件名,所以,我很肯定,这是个压缩包
用压缩软件打开
里面是3个svg图像,两个wav音频和1个json,这个json显然是核心,但是我们先打开其他文件看看
第一个svg图像是默认精灵的外观,我们接着打开其他
分别是:
默认背景“啵”音效
默认精灵“喵”音效
默认精灵的两个造型
最激动人心的时刻来了,我们打开最后的project.json
很乱,我们用VSCode打开
映入眼帘的是一个targets数组,我们先看数组里的第一个对象
经过略微研究,我得到了部分标签的信息
2. 结论
显然,一个targets数组对象不是用Scratch官方所给的“精灵”或是“背景”能描述的,因为它同时包括两者。所以我们赋予它一个新的名字,这很容易让我们想到C++、Java、JS等面向对象编程语言中的“类(Class)”的概念,所以我们称它为类
这是我们目前能确定下来的标签
接着,我们创建第二个变量
这时,variables对象就会多出来一个数组,标签是随机字符
可见,数组第一项为名称,第二项为值
但是数组名称真的是随机字符吗?我们抱着试一试的态度修改project.json,在variable对象中增加一个数组,标签略作修改,名称为testVariable,值为5
如图,确实多了一个变量,
接着我们建立一个列表,名为list
此时lists对象也会多出一个数组
由此可得,列表的名称是随机字符,第一项为列表名称,第二项为列表的值,第二项中的每 一项都是列表中的对应项
最后就是我们的重头戏:积木
积木数据存储在类对象的blocks对象中,一个blocks对象子对象大致长这样
上方是一个“移动10步“积木
opcode是区分对象操作的标识,这里我们也给他起个名字,叫“命令(Command)”
但是需要注意,一个blocks对象子数组不单单描述一个积木,如一个“移到”积木会包含两个对象,命令分别是“motion_goto”,“motion_goto_menu”,第一个命令的输入会将第二个命令的标识符传入以调用
next应该是存储下一个积木的标识符,parent即父积木,由于此处没有给他拼接启动积木,所以为空(Null)
inputs是当一个积木有参数时,Scratch会读取inputs对象中的每一个数组为参数,如STEPS指代该数组唯一的参数,即移动步长。第一项为参数索引,第二项为参数值,但令笔者百思不得其解的实际上是参数值的第一项,即图中4。经过笔者实践发现,该值实际上大部分积木种类中是相同的。参数值第二项即参数值本身
3. 用途
实际上,这些东西当读者阅读Scratch源码时就可以知道,但是毕竟不是所有人都有时间阅读冗长的JavaScript源码。笔者以解析文件格式为目的,鼓励大家发现事物实质。
如果读者有兴致,可以本文为参考,自行编写一款Sb3文件编辑器,从此摆脱Scratch文件系统束缚,开始自己的编辑之旅
近年来,随着我国居民消费水平的逐渐提高,人们的消费方式也日渐多元化,而功能饮料由于其方便、美味的特点,逐渐被越来越多的消费者所喜爱
12月10日上午,一辆红白装饰的宝马汽车从位于北京中关村软件园的百度大厦附近出发,驶入G7京新高速公路,经五环路,抵达奥林匹克森林公园,
12月10日,前来参加广东电商大会的京东集团CEO刘强东在接受《第一财经日报》记者专访时透露,明年京东在农村市场将测试使用无人机送货,以
神经介入技术,很多人对此不明白或者不知道,甚至包括一些医务人员也知之甚少。这并不奇怪,因为神经介入是新兴学科,是脑血管病治疗的前沿
神经介入技术,很多人对此不明白或者不知道,甚至包括一些医务人员也知之甚少。这并不奇怪,因为神经介入是新兴学科,是脑血管病治疗的前沿
X 关闭
X 关闭