拆解Scratch项目文件的发现

拆解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文件的结构和每个字段的作用。希望对大家有所帮助。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值