我需要构建一个迷你版本的编程块,用于Scratch或更高版本的snap!或者开瓶器。
它们中的代码都很大,很难理解,特别是在Scratch中,它是用SmallTalk的某种子集编写的,我不知道。
我在哪里可以找到他们都用来解析块并将其转换成一组指令的算法,这些指令可以处理一些东西,比如动画或游戏,比如在Scratch中?
我真正感兴趣的是编程块概念背后的算法或体系结构。
发布于 2014-08-10 08:09:45
这将只是一个非常普遍的解释,这取决于你制定具体的细节。
定义块
有一个所有块都继承的Block类。它们通过标签(名称)、形状和对方法的引用进行初始化。当它们被运行/调用时,关联的方法将传递当前上下文(sprite)和参数。
精确的实现在不同版本之间有所不同。例如,在Scratch 1.x中,方法接受与块的参数相对应的参数,而上下文(this或self)是sprite。在2.0中,它们被传递给一个包含块的所有参数和上下文的单个参数。抓紧!似乎遵循了1.x方法。
堆栈(命令)块不返回任何内容;记者块返回。
口译
解释器的工作方式有点像这样。每个块包含对下一个块和任何子例程的引用(参数中的报告块;C槽中的命令块)。
首先,所有的参数都被解决了。记者被呼叫,他们的返回值被储存起来。这是递归完成的,在彼此内部的许多Reporter块中。
然后,执行命令本身。理想情况下,这是一个简单的命令(例如,迁移)。方法被调用,阶段被更新。
继续下一个街区。
C块
C块有一个稍微不同的过程。这是if <>风格和repeat <>风格。除了他们的普通论点外,他们还提到了他们的“抄本”子程序。
对于一个简单的if/else C块,只要正常执行子例程就行了。
但是,在处理循环时,您必须确保线程正确,并等待其他脚本。
事件
按键/单击事件可以很容易地处理。只需按下/单击键即可执行它们。
在运行广播堆栈时,可以通过执行hat来执行类似广播的操作。
其他的事情你得自己解决。
等待块
对我来说,这和线程一样,是解释中最令人困惑的部分。基本上,您需要确定什么时候继续使用脚本。也许设置一个计时器在时间结束后执行,但是仍然需要正确地执行线程。
我希望这能帮到你!
https://stackoverflow.com/questions/21244208
复制相似问题