【问题标题】:MIT-Scratch : Sequential cloning without delayMIT-Scratch : 无延迟的顺序克隆
【发布时间】:2018-05-14 16:44:52
【问题描述】:

我刚开始把它作为一个年轻人的教育工具玩,并在尝试克隆精灵时遇到奇怪的行为。

我为 sprite_1 中的位置 x,y 设置了一个全局变量,并克隆了一个 sprite_2 对象。该对象立即将全局 x,y 复制到本地 x,y 并退出。稍后 sprite_2 使用存储的本地 x,y 进行渲染。

sprite_1:

sprite_2:

根据这个可复制的小示例,我希望四个精灵在屏幕上对角线向上/向右克隆。相反,我似乎得到了四个 sprite_2 对象,它们都在彼此之上:

如果我在 clone(x,y) 函数的末尾添加 1 秒的延迟,但一切都很好:

由于所有四个 sprite_2 对象似乎都是放置最后一个克隆的位置,我怀疑这些克隆不是立即创建的,而是在某个时间一次性创建的,因此都采用最后一个坐标来自全局 _clone_enemy_x/y。

是这样吗?有没有办法规避这种行为或解决方案是什么?

【问题讨论】:

  • 您可以尝试添加wait (0) secs 而不是wait (1) secs 吗?我有一种感觉,这只是一个竞争条件,我很想看看这是否能解决它。
  • 有趣的是,我在我的项目中尝试了 0 并且它不起作用,但是我在这个简单的复制中尝试了它并且它成功了。然后我将 clone(x.y) 放入 50 的循环中,它仍然有效。这意味着您有解决当前问题的方法,并且我可能在项目中有错误,或者由于工作量(项目具有滚动和星屏)而无法解决整个项目中的竞争条件
  • 你能分享一个项目的链接(并分享项目)吗?我现在很好奇是否还有其他可能影响这一点的因素。
  • 我还没准备好分享它,所以我忍着。我通过改变生成方式来解决这个问题。在想要诱导生成的精灵中,我发送了一条消息。我回答要生成的精灵中的味精。我可以使用创建自我克隆来创建许多背靠背。为帮助干杯。
  • 这看起来与我在stackoverflow.com/questions/42984298/a-grid-of-clones 的问题相同。 @PullJosh 清楚地回答了这个问题。

标签: mit-scratch


【解决方案1】:

我有两种可能的解决方案:

  1. 转到“define clone()()”块,右键单击它,打开高级下拉菜单,然后勾选“运行而不刷新屏幕”。
  2. 完全摆脱自定义块,但在实际代码中使用该块的原始源代码。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2018-12-10
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多