- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要构建 Scratch 中使用的编程 block 的迷你版或稍后!或开放 block 。
它们中的代码都很大而且很难理解,尤其是在 Scratch 中,它是用 SmallTalk 的某种子集编写的,我不知道。
我在哪里可以找到他们都用来解析 block 并将其转换为一组指令的算法,这些指令适用于某些东西,例如 Scratch 中的动画或游戏?
我对编程 block 概念背后的算法或架构非常感兴趣。
最佳答案
这只是一个非常笼统的解释,具体细节由您决定。
定义 block
有一个Block
所有 block 都继承自的类。它们使用它们的标签(名称)、形状和对该方法的引用进行初始化。当它们被运行/调用时,关联的方法被传递当前上下文(sprite)和参数。
不同版本的具体实现不同。例如,在 Scratch 1.x 中,方法采用与 block 参数相对应的参数,上下文(this
或 self
)是 Sprite 。在 2.0 中,它们被传递一个包含所有 block 的参数和上下文的参数。折断!似乎遵循 1.x 方法。
堆栈(命令) block 不返回任何内容;记者 block 做。
口译
解释器的工作方式有点像这样。每个 block 都包含对下一个 block 的引用,以及任何子例程(参数中的报告器 block ;C 槽中的命令 block )。
首先,所有论点都已解决。调用记者,并存储他们的返回值。这是针对彼此内部的许多 Reporter block 递归完成的。
然后,命令本身被执行。理想情况下,这是一个简单的命令(例如移动)。方法被调用,Stage 被更新。
继续下一个 block 。
C block
C block 的程序略有不同。这些是 if <>
样式,以及 repeat <>
那些。除了它们的普通参数之外,它们还引用了它们的“miniscript”子例程。
对于一个简单的if/else
C block ,如果适用,只需正常执行子程序。
但是,在处理循环时,您必须确保线程正确,并等待其他脚本。
事件
按键/点击事件可以很容易地处理。只需在按键/单击时执行它们。
当广播堆栈运行时,可以通过执行帽子来完成广播之类的事情。
其他事件你必须自己解决。
等待 block
这与线程一起对我来说是解释中最令人困惑的部分。基本上,您需要弄清楚何时继续执行脚本。也许设置一个计时器在时间之后执行,但你仍然需要正确地线程。
我希望这有帮助!
关于mit-scratch - Scratch 编程 block 背后的架构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244208/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!