【问题标题】:In Scratch, how can the clone A of Sprite2 detect if it's touching another clone B of the same Sprite2 and delete both clones?在 Scratch 中,Sprite2 的克隆 A 如何检测它是否接触到同一个 Sprite2 的另一个克隆 B 并删除这两个克隆?
【发布时间】:2022-06-13 06:18:45
【问题描述】:

这是Scratch中的一个小程序。

我想做什么:

当 Sprite2 的一个克隆 A 接触同一个 Sprite2 的另一个克隆 B 时,两个克隆都被删除,但任何其他克隆仍然存在并执行。

我尝试过的:

我曾尝试查找是否有“触摸另一个克隆”之类的选项,但没有找到。

我还尝试放置一个传感器来检测克隆是否与其相同的颜色进行接触(如果[颜色{红色}触摸颜色{红色}]然后)=>(删除克隆),但它没有工作,它进入了一个无限循环,页面开始变得不稳定,所以我删除了它。

我什至在 sprite 之外创建了函数(在那里我可以找到选项(触摸 [sprite2] ?)),然后将函数移到 sprite2 内部,但它忽略了新插入的函数。

你知道这是怎么做到的吗?

【问题讨论】:

    标签: mit-scratch


    【解决方案1】:

    如您的屏幕截图所示,“触摸”块的下拉列表显示项目中所有精灵的列表(在本例中为 Sprite1)除了当前精灵 (Sprite2)。 p>

    幸运的是,在 Sprite2 中可能有一个“触摸 Sprite2”块。 这有点骇人听闻,但它确实有效。请按以下步骤操作:

    1. 转到 Sprite1 的代码区。 (除了 Sprite2 之外的任何精灵都可以。如果 Sprite2 是项目中唯一的精灵,请添加一个虚拟精灵;您可以在第 4 步之后安全地删除它。)
    2. 从“感应”组中,将“触摸”块拖到代码区域。
    3. 打开方块的下拉菜单并选择 Sprite2。
    4. 将块从代码区域拖到 Sprite2(如精灵集合中所示,右下角)。
    5. 转到 Sprite2。注意那里有一个'touching Sprite2'块。将其拖到您需要的脚本中。

    当使用它使克隆在碰撞时消失时,您可能会注意到只有一个克隆会消失,而另一个会存活。 这是一个“竞争条件”:同时发生的事件永远不会完全同时发生。 第一个检测到碰撞的克隆会自行删除,从而在另一个克隆有机会检测到它之前将其删除。

    在大多数情况下,可以通过在“删除此克隆”块的正上方添加一个“等待 0 秒”块来解决此问题。 等待零秒可能看起来像无操作,但实际上是有效果的: 它使其他线程(脚本、克隆、精灵)有时间赶上当前线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2017-12-01
      • 2013-04-15
      相关资源
      最近更新 更多