【发布时间】: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