拆解Scratch项目文件的发现
我对Scratch 3保存的项目文件进行了解压的操作,打开解压后的文件夹一看,发现里面的文件十分简单。
Scratch 3保存的项目文件是一个zip文件,解压后包含了一个json文件,这个json文件里面保存了项目的信息。json文件中包含了一个名为“targets”的数组,这个数组中保存了项目中的所有积木块的信息。每个积木块的信息都是一个对象,包含了积木块的类型、参数、注释等信息。
图像音频文件
Scratch项目文件中的图像和音频都直接保存在了sb3文件的根目录中,可直接查看,文件名比较长,可能是md5值,但可以确定的是,图像文件名和音频文件名都是唯一的。
json文件
json文件中保存了项目的信息,包括项目名称、描述、脚本、变量、列表、广播等。其中,脚本部分包含了项目中的所有积木块的信息,包括积木块的类型、参数、注释等信息。变量、列表、广播等部分则包含了项目中的变量、列表、广播等信息。不同对象的变量、图像、音频等分别存放在不同的字典中。
接下来将逐个介绍这个json文件
基本结构
这个json的基本结构如下:
{
"targets": ["这里省略"], //对应存储各个对象及其脚本、图片、音频等信息
"monitors": [], //我还不知道
"extensions": [], //我个人感觉是存储扩展信息
"meta": {
"semver": "3.0.0",
"vm": "0.2.0-prerelease.20220222132735",
"agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Scratch/3.29.1 Chrome/94.0.4606.81 Electron/15.3.1 Safari/537.36"
} //应该是存储一些需要联网访问的headers或者是系统信息
}
targets
targets数组中保存了项目中的所有对象的信息,包括脚本、图片、音频等。每个对象的信息都是一个对象,包含了对象的类型、参数、注释等信息。
这里举targets数组中第一个对象为例:
{
"isStage": true,
"name": "Stage",
"variables": {
"`jEk@4|i[#Fk?(8x)AV.-my variable": [
"我的变量",
0
]
},
"lists": {},
"broadcasts": {},
"blocks": {},
"comments": {},
"currentCostume": 0,
"costumes": [
{
"assetId": "cd21514d0531fdffb22204e0ec5ed84a",
"name": "背景1",
"md5ext": "cd21514d0531fdffb22204e0ec5ed84a.svg",
"dataFormat": "svg",
"rotationCenterX": 240,
"rotationCenterY": 180
}
],
"sounds": [
{
"assetId": "83a9787d4cb6f3b7632b4ddfebf74367",
"name": "啵",
"dataFormat": "wav",
"format": "",
"rate": 48000,
"sampleCount": 1123,
"md5ext": "83a9787d4cb6f3b7632b4ddfebf74367.wav"
}
],
"volume": 100,
"layerOrder": 0,
"tempo": 60,
"videoTransparency": 50,
"videoState": "on",
"textToSpeechLanguage": null
}
isStage
isStage是一个布尔值,表示这个对象是否是舞台。如果是舞台,那么isStage的值为true
,否则为false
。
name
name是一个字符串,表示这个对象的名称。
variables
variables是一个字典,保存了项目中的所有变量的信息。每个变量的信息都是一个数组,包含了变量的名称和初始值。
lists
lists是一个字典,保存了项目中的所有列表的信息。每个列表的信息都是一个数组,包含了列表的名称和初始值。
broadcasts
broadcasts是一个字典,保存了项目中的所有广播的信息。每个广播的信息都是一个数组,包含了广播的名称和初始值。
blocks
blocks是一个字典,保存了项目中的所有积木块的信息。每个积木块的信息都是一个数组,包含了积木块的类型、参数、注释等信息。
comments
comments是一个字典,保存了项目中的所有注释的信息。每个注释的信息都是一个数组,包含了注释的名称和初始值。
costumes
costumes是一个数组,保存了项目中的所有图片的信息。每个图片的信息都是一个对象,包含了图片的名称、格式、大小等信息。
sounds
sounds是一个数组,保存了项目中的所有音频的信息。每个音频的信息都是一个对象,包含了音频的名称、格式、大小等信息。
volume
volume是一个整数,表示项目的音量大小。
layerOrder
layerOrder是一个整数,表示项目的层级顺序。
tempo
tempo是一个整数,表示项目的播放乐器声节奏(在拓展的积木中用得到)。
videoTransparency
videoTransparency是一个整数,表示项目的视频透明度(好像是在使用摄像头的时候调整)。
videoState
videoState是一个字符串,表示项目的视频状态。
textToSpeechLanguage
textToSpeechLanguage是一个字符串,表示项目的文本转语音语言(在拓展积木中用得到)。
总结
以上是对sb3文件拆解的笔记,主要介绍了sb3文件的结构和每个字段的作用。希望对大家有所帮助。