首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >划痕编程块背后的架构是什么?

划痕编程块背后的架构是什么?
EN

Stack Overflow用户
提问于 2014-01-20 21:10:39
回答 1查看 1.2K关注 0票数 11

我需要构建一个迷你版本的编程块,用于Scratch或更高版本的snap!或者开瓶器。

它们中的代码都很大,很难理解,特别是在Scratch中,它是用SmallTalk的某种子集编写的,我不知道。

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

我真正感兴趣的是编程块概念背后的算法或体系结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-10 08:09:45

这将只是一个非常普遍的解释,这取决于你制定具体的细节。

定义块

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

精确的实现在不同版本之间有所不同。例如,在Scratch 1.x中,方法接受与块的参数相对应的参数,而上下文(thisself)是sprite。在2.0中,它们被传递给一个包含块的所有参数和上下文的单个参数。抓紧!似乎遵循了1.x方法。

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

口译

解释器的工作方式有点像这样。每个块包含对下一个块和任何子例程的引用(参数中的报告块;C槽中的命令块)。

首先,所有的参数都被解决了。记者被呼叫,他们的返回值被储存起来。这是递归完成的,在彼此内部的许多Reporter块中。

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

继续下一个街区。

C块

C块有一个稍微不同的过程。这是if <>风格和repeat <>风格。除了他们的普通论点外,他们还提到了他们的“抄本”子程序。

对于一个简单的if/else C块,只要正常执行子例程就行了。

但是,在处理循环时,您必须确保线程正确,并等待其他脚本。

事件

按键/单击事件可以很容易地处理。只需按下/单击键即可执行它们。

在运行广播堆栈时,可以通过执行hat来执行类似广播的操作。

其他的事情你得自己解决。

等待块

对我来说,这和线程一样,是解释中最令人困惑的部分。基本上,您需要确定什么时候继续使用脚本。也许设置一个计时器在时间结束后执行,但是仍然需要正确地执行线程。

我希望这能帮到你!

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21244208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档