scratch入门之天坑总结
- 作者: Jacques-YQ
- 时间:
- 分类: 未分类
- 评论
以下都是自己使用中摸索的体验, 并不是官方答案.
对象与线程
scratch中的角色和背景都相当于对象. 构造新对象的方式, 除了直接静态添加, 也可以动态新增,也就是"克隆"
"当作为克隆体启动"事件,相当于构造函数, 但这个构造函数不能输入形参.
但对象只有私有函数, 没有公共函数.
这些角色和背景还相当于启动了不同的线程. 所以执行任何一个对象中的死循环不会影响其他对象代码的执行. 所以可以在对象中死循环用"等待"积木等待一个全局变量.
函数
scratch没有全局函数, 也没有公共函数, 相当于只有私有函数, 而且私有函数只有形参而没有返回值. 造成了返回值的传递和不同对象间传递数据非常依赖全局变量, 或者是消息机制.
构造函数的形参
克隆体一般都需要表现的与原对象不同, 这就要传入形参. 此时又需要一个全局变量传递给克隆体. 等待广播消息是不行的, 因为等待广播消息是一个事件而不是一个语句. 如果循环产生多个克隆体, 由于克隆是异步的, 所以必须要等待克隆体使用了全局变量以后,才能继续克隆, 相当于是要将异步克隆改为类似同步的方式.
异步和同步
scratch中的事件块是异步执行的, 这个自然不用说.
绝大多数语句是同步的. 但有少数语句是异步的, 有的语句同时有异步和同步版本.
"广播"是异步的, 而"广播并等待"是同步的, 并且是等待所有"当接收到消息"事件返回后再继续执行.
"克隆"是异步的. 这算是个天坑. 如果