猫史档案馆


【教程帖】学会游戏设计 五、不同步问题

用户:SKQASKQA查看:4 回复:3 评论:4 创建时间:2020-04-16T18:03:48


在第三节“搭建流程结构以充分利用广播”中,我们说初始化一定需要广播并等待。这是为什么呢?我们来看一个很小的例子。

center_image

你说这个程序,角色会移动10步吗?

这个问题你吃的准吗?吃不准。因为多个绿旗点击的顺序是随机的,你不知道谁先执行。所以,你不知道某变量是设为1先执行还是设为2先执行。这就吃不准到底是1还是2了。

有可能你还没听懂,那我就举一个实例。

现有两个角色,外观都一样,都是一个椭圆,且位置不相同。两个椭圆的程序都一样,如下图。

center_image

你知道这程序执行出来啥样吗?

经多次实验,发现极大可能性某一个角色会缺少一椭圆。这是为啥?

因为scratch执行程序不可能同时执行两个程序的,除非有两个scratch才行。而scratch能做到的,是在最短时间内执行两个程序。也就是说,scratch不可能同时执行两个程序,每个程序肯定都是有执行的顺序的。而至于谁先谁后,scratch会随机挑选,你吃不准的。而为什么这个案例会缺少一椭圆呢?是因为,当角色2清空并第一次图章,此时角色1执行清空了,也就是把角色2的印章清掉了,因此才会少一个椭圆

那怎么解决这个问题呢?

一、广播

广播是一个很好的办法。

可以先等一个角色执行完最后一次图章后,这时发送广播,另外一个角色接收到广播后再去执行自己的印章,不过清空要去掉;

也可以发送广播先等清空完之后再去同时图章,但这与两个角色无关,我们需要让背景来做清空操作。

这两种方法,你喜欢哪种呢?

我喜欢第二种。有很多训练师喜欢第一种,我说说我的理由。因为第一种方法完全改变了顺序,程序的执行过程就会发生改变;而第二种方法没改变执行顺序,依旧先清空再去各做各的图章。

这两种方法,你学会了吗?

看看第二种方法。

二、等待0秒

别慌!很多人说等待0秒是没有意义的,但如果你在9020年再这样想,那你就错啦!

啥意思呢?

等待0秒是有意义的。

等待0秒有什么意义呢?等待0秒,并不是你们想象的“等个空气”,scratch执行程序不会这么执行,scratch会尝试先执行其他的程序。就拿第一个案例说吧,如果你想保证最终“某变量”=1,你某变量设为2的程序一定要先做,而下一次做就会遮盖2。理清楚思路后,就可以得到下图的程序

center_image

当然在第二个案例中不能这样做,只能用广播来做,有兴趣的训练师们可以试一试哦~


回复

上一页1 页 / 共 1下一页
WaZCWaZC

..

点赞0


评论


帅气的剑杰帅气的剑杰

嗯,在sch(后面我忘了)等待0秒是有意意的,我懂了

点赞0


评论


718B2045718B2045

可以用更专业的词语说,加一个等待0秒可以改变两个程序的「优先级」~

点赞0


评论