use*_*898 10 mit-scratch block-programming
我需要构建一个迷你版本的编程块,用于Scratch或稍后的快照!或者打开块.
所有这些代码都很大而且难以理解,特别是在Scratch中,它是用SmallTalk的某种子集编写的,我不知道.
我在哪里可以找到他们用来解析块并将其转换为一组指令的算法,这些指令可以处理某些事情,比如Scratch中的动画或游戏?
我对编程块概念背后的算法或体系结构非常感兴趣.
Sci*_*ter 22
这只是一个非常普遍的解释,由你来决定具体细节.
有一个Block类,所有块都继承自.它们的标签(名称),形状和对方法的引用初始化.当它们被运行/调用时,关联的方法被传递给当前上下文(sprite)和参数.
确切的实现因版本而异.例如,在Scratch 1.x中,方法接受与块的参数对应的参数,而上下文(this或self)是精灵.在2.0中,它们传递一个包含所有块的参数和上下文的参数.瞬间!似乎遵循1.x方法.
堆栈(命令)块不返回任何内容; 记者块做.
口译员的工作方式有点像这样.每个块包含对下一个块的引用,以及任何子例程(参数中的报告块; C槽中的命令块).
首先,所有论点都得到了解决.记者被调用,并存储他们的返回值.对于许多彼此内部的Reporter块,这是递归完成的.
然后,执行命令本身.理想情况下,这是一个简单的命令(例如移动).调用该方法,更新舞台.
继续下一个街区.
C块的程序略有不同.这些是if <>风格和风格repeat <>.除了普通的论点外,他们还引用了他们的"miniscript"子程序.
对于简单的if/elseC块,只需正常执行子程序(如果适用).
在处理循环时,您必须确保正确地进行线程化,并等待其他脚本.
Keypress /点击事件可以很容易地处理.只需在按键/点击时执行它们.
广播可以通过在广播堆栈运行时执行帽子来完成.
您必须自己解决的其他事件.
这与线程一起,是对我的解释中最令人困惑的部分.基本上,您需要确定何时继续使用脚本.也许设置一个计时器在时间之后执行,但你仍然需要正确地进行线程化.
我希望这有帮助!