首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量增加3而不是1

变量增加3而不是1
EN

Stack Overflow用户
提问于 2022-04-29 02:54:43
回答 1查看 85关注 0票数 0

在Scratch中,我有一个变量,应该在每次接收广播时更改一个变量,但是在测试时,每个广播会更改三个变量,但我找不出原因。用于发送广播的按钮有3个克隆,但是每个都有不同的功能,发送广播取决于“选择的按钮”变量被设置为"fight“,所以不要认为这会影响结果。

我查看了我所有的代码,它没有被复制,没有任何其他的改变变量,而且广播一次只发送一次。如果我点击这些块自己运行,它甚至可以很好地工作,但是当它作为游戏中的函数运行时,它会改变它3,我不明白为什么。

更改变量的代码是:

代码语言:javascript
复制
When I recieve "attack"
Change "attacktimes" by 1

发送广播的代码如下:

代码语言:javascript
复制
When key "z" pressed
if "enemy turn" = "0"
if "button type" = "fight"
broadcast "fight"

有人知道解决办法吗?

这也是一个共享的项目,虽然是不完整的。我的项目

重新创建错误的步骤列于说明中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-29 13:45:09

广播是一种强大的机制,但很难控制,特别是在使用克隆的项目中。

我查看了我所有的代码,没有重复

这是无关紧要的。这一切都在这个名字里:到处都是广播,。在查看(静态)代码时,看起来似乎是一个单一的动作,在运行时可能会向各个方向爆炸。

通常,在克隆具有“当我收到”消息处理程序的时,要非常小心地克隆。消息处理程序将为每个克隆以及原始的sprite触发。

在你的例子中,雪碧'Error404 Sans‘有两个克隆。再加上原始的精灵,一共有三个物体。当消息“攻击”出现时,将对这三个对象中的每个对象执行“当我收到攻击”脚本。因为变量'AttackTimes‘是一个全局变量,它将增加三次。

那怎么解决这个问题?在这种情况下,最简单的方法是将整个“当我收到攻击”脚本移到舞台上,转到一个虚拟的精灵或者其他没有克隆的上。有一个由三部分组成的桑斯雪碧是很可爱的,给他“呼吸”的眼神。但这已经是雪碧的一大责任;更好地在其他地方实施‘进攻’部分。否则,你会发现自己被桑斯的头、躯干和腿单独攻击。

一个更笨拙的解决方案将是使用一个‘if-然后’块,以确保只有一个特定的克隆将继续进行攻击。对于“if”条件,您将需要一个“只用于这个精灵”变量或任何其他特定于克隆的变量(例如位置、服装名称)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72052301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档