如何用列表块检查列表中每个项是否满足指定距离计算等式?
在Scratch中实现主角色与克隆体坐标距离检测
首先纠正公式表述问题:你需要的逻辑应该是主角色与克隆体的坐标差的绝对值小于d,也就是 |x主角色 - x克隆体| < d 和 |y主角色 - y克隆体| < d(而非|x| - |o| < d,后者不符合坐标距离的检测需求)。
(list) contains () 块仅能检查列表中是否存在特定值,无法完成遍历+数值计算+条件判断的复合逻辑,必须通过循环遍历列表项来实现,以下是两种常见存储方式的具体实现:
情况1:列表成对存储克隆体X/Y坐标
假设你的列表(比如命名为「克隆体坐标」)中,每2个条目对应一个克隆体的坐标(第1项=克隆体1的X,第2项=克隆体1的Y;第3项=克隆体2的X,第4项=克隆体2的Y),可以用以下逻辑:
当绿旗被点击 将[索引 v]设为1 重复执行直到 <(索引) > (长度 of [克隆体坐标 v])> 将[克隆体X v]设为(项目 (索引) of [克隆体坐标 v]) 将[克隆体Y v]设为(项目 (索引 + 1) of [克隆体坐标 v]) // 判断X/Y坐标差的绝对值是否都小于d 如果 <<(abs((x位置) - (克隆体X))) < (d)> 且 <(abs((y位置) - (克隆体Y))) < (d)>> 那么 // 此处写入检测到符合条件的克隆体后的逻辑(比如触发提示、角色互动等) 将[索引 v]增加2
情况2:列表单条目存储X/Y组合字符串
如果列表中每个条目是用逗号分隔的坐标字符串(比如「100,50」),可以先分割字符串再提取坐标:
当绿旗被点击 将[索引 v]设为1 重复执行直到 <(索引) > (长度 of [克隆体坐标 v])> 将[坐标字符串 v]设为(项目 (索引) of [克隆体坐标 v]) 将[分割后坐标 v]设为(分割 (坐标字符串) 以 [,]) 将[克隆体X v]设为(数字 (项目 1 of [分割后坐标 v])) 将[克隆体Y v]设为(数字 (项目 2 of [分割后坐标 v])) 如果 <<(abs((x位置) - (克隆体X))) < (d)> 且 <(abs((y位置) - (克隆体Y))) < (d)>> 那么 // 写入你的触发逻辑 将[索引 v]增加1
可选:检测直线距离(欧几里得距离)
如果需要判断主角色与克隆体的直线距离小于d,可以用平方和替代开根号(提升计算效率),条件改为:
如果 <( ((x位置) - (克隆体X)) * ((x位置) - (克隆体X)) + ((y位置) - (克隆体Y)) * ((y位置) - (克隆体Y)) ) < ((d) * (d))> 那么
内容的提问来源于stack exchange,提问作者Flaming
相关产品推荐
相关产品推荐

