在Scratch中,我有一个变量,应该在每次接收广播时更改一个变量,但是在测试时,每个广播会更改三个变量,但我找不出原因。用于发送广播的按钮有3个克隆,但是每个都有不同的功能,发送广播取决于“选择的按钮”变量被设置为"fight“,所以不要认为这会影响结果。
我查看了我所有的代码,它没有被复制,没有任何其他的改变变量,而且广播一次只发送一次。如果我点击这些块自己运行,它甚至可以很好地工作,但是当它作为游戏中的函数运行时,它会改变它3,我不明白为什么。
更改变量的代码是:
When I recieve "attack"
Change "attacktimes" by 1发送广播的代码如下:
When key "z" pressed
if "enemy turn" = "0"
if "button type" = "fight"
broadcast "fight"有人知道解决办法吗?
这也是一个共享的项目,虽然是不完整的。我的项目
重新创建错误的步骤列于说明中。
发布于 2022-04-29 13:45:09
广播是一种强大的机制,但很难控制,特别是在使用克隆的项目中。
我查看了我所有的代码,没有重复
这是无关紧要的。这一切都在这个名字里:到处都是广播,,。在查看(静态)代码时,看起来似乎是一个单一的动作,在运行时可能会向各个方向爆炸。
通常,在克隆具有“当我收到”消息处理程序的时,要非常小心地克隆。消息处理程序将为每个克隆以及原始的sprite触发。
在你的例子中,雪碧'Error404 Sans‘有两个克隆。再加上原始的精灵,一共有三个物体。当消息“攻击”出现时,将对这三个对象中的每个对象执行“当我收到攻击”脚本。因为变量'AttackTimes‘是一个全局变量,它将增加三次。
那怎么解决这个问题?在这种情况下,最简单的方法是将整个“当我收到攻击”脚本移到舞台上,转到一个虚拟的精灵或者其他没有克隆的上。有一个由三部分组成的桑斯雪碧是很可爱的,给他“呼吸”的眼神。但这已经是雪碧的一大责任;更好地在其他地方实施‘进攻’部分。否则,你会发现自己被桑斯的头、躯干和腿单独攻击。
一个更笨拙的解决方案将是使用一个‘if-然后’块,以确保只有一个特定的克隆将继续进行攻击。对于“if”条件,您将需要一个“只用于这个精灵”变量或任何其他特定于克隆的变量(例如位置、服装名称)。
https://stackoverflow.com/questions/72052301
复制相似问题