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

时间:2014-01-20 21:10:40

标签: mit-scratch block-programming

我需要构建一个迷你版本的编程块,这些编程块在Scratch或更高版本的snap中使用!或者打开块。

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

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

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

1 个答案:

答案 0 :(得分:22)

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

定义块

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

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

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

解释

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

首先,所有参数都已解决。记者被调用,并存储他们的返回值。这是针对彼此内部的许多Reporter块递归完成的。

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

继续下一个区块。

C块

C块的程序略有不同。这些是if <>样式和repeat <>样式。除了普通的论点外,他们还引用了他们的&#34; miniscript&#34;子程序。

对于简单的if/else C块,只需正常执行子程序即可。

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

活动

Keypress / click事件可以轻松处理。只需在按键/点击时执行它们。

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

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

等待块

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

我希望这有帮助!