Scratch二次开发快速入门

764 阅读2分钟

一、UI与代码文件对应关系

image.png

  • toolbox里面包含flyout_base, flyout_base包含workspace。
  • flyout_base有两个实现:flyout_horizontal(横排列),flyout_vertical(竖排列)
  • worksapce是积木块的容器,ui实现有workspace_svg
  • 积木块实现是block.js,ui现实有block_svg,block_svg又现实了两种排列:block_render_svg_horizontal(横排列)和block_render_svg_vertical(竖排列) 二、DOM树结构

每个积木块代码实例是Block,都有svg(dom节点)、xml描述,功能块Xml.js提供相应的转换。每个block的dom节点在class='blocklyBlockCanvas'上,class='blocklyBlockCanvas'上层是class='blocklyWorkspace',对应是WorkspaceSvg代码实例,Scratch-Blocks的整一个dom入口是class=‘injectionDiv’,简化结构如下:

class=‘injectionDiv’

|—— class='blocklyToolboxDiv'

|—— class='blocklySvg'

|      |—— class='blocklyWorkspace'

|                 |—— class='blocklyBlockCanvas'

|                 |—— class='blocklyBubbleCanvas'

|—— class='blocklyFlyout'

          |—— class='blocklyWorkspace'

                     |—— class='blocklyBlockCanvas'

                     |—— class='blocklyBubbleCanvas'

三、角色的相关实现类

每个角色对象就是RenderedTarget,对应文件就是rendered-target.js,内部成员Sprite实现了外观,声音,积木块等相关资源。

四、scratch工程的三大主要模块

scratch-blocks:积木块功能,通过Blockly二次开发

scratch-vm:业务逻辑模块,执行编程的命令

scratch-render:渲染层,舞台的控制都在这里

五、scratch-blocks修改

在scratch-gui中,参考blocks.js,是通过修改导出的scratchBlocks,从而修改scratch-blocks功能,所以我们可以用同样的方案去免编译修改scratch-blocks。

需要快速获取scratch-blocks的修改效果,直接浏览器打开scratch-blocks项目下的tests文件夹的html文件即可。

六、scratch-vm工程主要说明

image2.png

image3.png

七、scratch-render,舞台相关的实现

舞台渲染的主要逻辑代码都在RenderWebGL类上,每个角色关联的对象是Drawable,角色的外观关联的对象是Drawable的skin成员,继承Skin的有PenSkin(画笔对象)、SVGSkin(SVG图片)、BitmapSkin(png,jpg图片)。