Scratch编程块背后的架构是什么?

use*_*898 10 mit-scratch block-programming

我需要构建一个迷你版本的编程块,用于Scratch或稍后的快照!或者打开块.

所有这些代码都很大而且难以理解,特别是在Scratch中,它是用SmallTalk的某种子集编写的,我不知道.

我在哪里可以找到他们用来解析块并将其转换为一组指令的算法,这些指令可以处理某些事情,比如Scratch中的动画或游戏?

我对编程块概念背后的算法或体系结构非常感兴趣.

Sci*_*ter 22

这只是一个非常普遍的解释,由你来决定具体细节.

定义一个块

有一个Block类,所有块都继承自.它们的标签(名称),形状和对方法的引用初始化.当它们被运行/调用时,关联的方法被传递给当前上下文(sprite)和参数.

确切的实现因版本而异.例如,在Scratch 1.x中,方法接受与块的参数对应的参数,而上下文(thisself)是精灵.在2.0中,它们传递一个包含所有块的参数和上下文的参数.瞬间!似乎遵循1.x方法.

堆栈(命令)块不返回任何内容; 记者块做.

解读

口译员的工作方式有点像这样.每个块包含对下一个块的引用,以及任何子例程(参数中的报告块; C槽中的命令块).

首先,所有论点都得到了解决.记者被调用,并存储他们的返回值.对于许多彼此内部的Reporter块,这是递归完成的.

然后,执行命令本身.理想情况下,这是一个简单的命令(例如移动).调用该方法,更新舞台.

继续下一个街区.

C块

C块的程序略有不同.这些是if <>风格和风格repeat <>.除了普通的论点外,他们还引用了他们的"miniscript"子程序.

对于简单的if/elseC块,只需正常执行子程序(如果适用).

在处理循环时,您必须确保正确地进行线程化,并等待其他脚本.

活动

Keypress /点击事件可以很容易地处理.只需在按键/点击时执行它们.

广播可以通过在广播堆栈运行时执行帽子来完成.

您必须自己解决的其他事件.

等待块

这与线程一起,是对我的解释中最令人困惑的部分.基本上,您需要确定何时继续使用脚本.也许设置一个计时器在时间之后执行,但你仍然需要正确地进行线程化.

我希望这有帮助!