You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从两个列表中随机选取对应X、Y坐标?Scratch问题排查

Scratch问题解决:Opal Sword无法定位到随机Dirt Block

问题复盘

原本想实现Opal Sword随机放置在Dirt Block上,思路是把所有Dirt克隆体的X/Y坐标分别存入两个列表,再通过随机数选取对应坐标,但运行后出现两个问题:

  • 点击绿旗后,(Dirt) Random X和(Dirt) Random Y始终为空
  • (Dirt) Random Number仅在0和1之间跳变

添加(Dirt) Initialization Finish标记确保列表生成完成后再取坐标,随机数范围恢复正常,但坐标还是无法传递。

核心问题与解决步骤

1. 列表索引逻辑错误

Scratch的列表索引是从1开始的,最初代码里随机数的起始值设为0,当列表为空时length of list返回0,随机数只能在0-0(或0-1)之间取值,导致无法正确获取列表项。

2. 克隆体坐标存储与初始化标记不同步

克隆体的启动有延迟,直接在主程序循环结束后标记初始化完成,此时克隆体可能还没把坐标写入列表,导致读取到空值。

3. 列表权限问题(可选排查点)

检查存储坐标的列表是否被设置为「仅Dirt角色可见」,若Opal Sword角色无法访问列表,自然读不到坐标值。

正确实现代码示例

Dirt角色主程序

when green flag clicked
delete all of [(Dirt) X v]
delete all of [(Dirt) Y v]
set (Dirt Clone Count v) to 0
set (Dirt Initialization Finish v) to false
repeat (10) // 替换为你需要的克隆数量
  create clone of [Dirt v]
end

Dirt克隆体程序

when I start as a clone
go to x: (pick random -240 to 240) y: (pick random -180 to 180)
add (x position) to [(Dirt) X v]
add (y position) to [(Dirt) Y v]
change (Dirt Clone Count v) by 1
if (Dirt Clone Count) = 10 then // 与上方克隆数量一致
  set (Dirt Initialization Finish v) to true
end

Opal Sword程序

when green flag clicked
wait until (Dirt Initialization Finish v) = true
set (Dirt Random Number v) to (pick random 1 to (length of [(Dirt) X v]))
set (Dirt Random X v) to (item (Dirt Random Number) of [(Dirt) X v])
set (Dirt Random Y v) to (item (Dirt Random Number) of [(Dirt) Y v])
go to x: (Dirt Random X) y: (Dirt Random Y)

内容的提问来源于stack exchange,提问作者Fire Dragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:10:00