我需要做的是:当精灵被按住的时候,精灵向下移动,但是我不想一下子移动特别快,我添加的触发事件如下:
当精灵被按住时:
通知所有人向下移动
睡眠0.3秒
这里通知所有人向下移动可以向下移动50个像素点。
我发现这么执行之后,只要按住这个精灵,相关的精灵就会很快很快的向下移动,几乎是0.1秒就从屏幕顶部下移动到底部,我不想这么快,所以加了睡眠语句,发现这个睡眠语句没什么用,即使改成睡眠1秒,睡眠10秒也没有用,还是很快就到达了底部。
大佬们知道怎么实现这个嘛?我感觉这个事件是只要精灵被按住,就一直触发,所以这里就一直发送通知向下移动。怎么实现我需要的这类控制吗?不想向下移动那么快。
建议改成,按住时设置变量A等于1,然后移动的那个精灵要判断,如果变量A等于1开始移动,不等于1就不执行移动的那块积木。
然后松开屏幕的时候,变量A设置为0..你试一下,应该可以,纯想像,试一下不行的话再发问题,修改调试
可能是因为每一帧都会检测一次是否被按住,这可能意味着每秒会执行60次,即,如果被按住就发通知,头一秒会发出60次通知 = 相关精灵一秒收到60次通知
注意,你的睡眠阻止不了它下一帧再探测自己有无被按住
那些精灵一秒收到60次通知,每次收到通知都往下走,那当然走得飞快。
一楼的方法很好用,他的方法巧妙地用变更变量的方法来取代“通知”。要谨慎使用通知,请确保通知的接收方是你能明确数量的,最好这个接收方不会收到通知之后又发一个通知出去,如果你把“按住就怎样”看作是一个对自己的通知,它的效果翻译成人话就是“检测到自己被按住就通知自己怎样怎样”,你就会发现你踩到的雷正是“收到通知后又发一个通知出去”
最后也是最重要的是永远不要让精灵在收到通知A之后发送一条所有人都收得到的通知A,举一个常见的实例:
精灵A被点击后向特定的精灵B发送通知“移动”,你想的是精灵B先移动,然后再通知其他精灵移动,于是你让精灵B收到通知移动后再通知所有人“移动”,然后悲剧发生了,所有精灵都疯狂移动,这是因为精灵B自己也会再次收到这个移动的通知,它又继续发通知..继续发通知...
你这个问题我自称为“卡循环”了,就是你在触发“按住”的事件之后,事件下面的积木脚本就以每帧一次循环去执行,这个看似是工具bug,其实是我们得分清“节点”和“过程”的逻辑,“松开”是一个节点,“按下”是一个过程,在运行至某个节点就会触发的积木脚本里,循环几次,等待几秒这些积木都是可以正常执行的;但是在一个“过程”里,因为整个过程的每一帧都是一个满足了某种条件的“节点”,所以程序在每一个节点都触发一次下方的积木脚本,造成了一种我们不需要的“卡循环”的状态。怎么解决?1楼的方法有时候管用,有时候不管用,有没有更好的解决方法我也不清楚,希望有大佬能告知,再就是尽量少用“过程”类的事件。