粉丝933获赞1.3万

squart 基础入门教程第十期,今天来做一个飞天小猫,先来看一下成品效果,小猫在午夜的城市里飞行啊,他可以吃金币,同时可以上天入地。用鼠标点击屏幕的上半部分,小猫就会向上移动, 点击下半部分呢,小猫就会向下移动,如果向上到达了边界,小猫就会反过来从下边出来,而向下到了边界呢,小猫就会从上边的边界再出来,碰到炸弹和钉板就会结束游戏 开始编码,先来确定角色,我们找一个 kite flying 飞翔的小猫,他默认就有两个造型,一个是平飞的,一个是向上飞的。把第二个造型复制一下,选中之后呢,做一个旋转, 制造出第三个造型,就是向下飞的造型。开始给小猫编码,先确定一个他的初始位置,那重复执行里边呢,我们要先判断一件 事情,就是他这个造型啊,应该是平飞还是上飞还是下飞,那按下鼠标呢,要么向上,要么向下,而不按鼠标的时候一定是平飞。所以呢,这里我们用一个如果,那么否则先把按不按鼠标两种情况分开了, 这上边的空里就是按下鼠标,而下边这个,否则的空里就是没按鼠标。那没按鼠标的时候呢,就应该是平飞的状态,他初始的时候也应该是平飞的状态,那按了鼠标的情况呢,还得再分成两种情况,所以再拿一个如果纳摩过来 分类的条件呢,就是按下的位置,也就是鼠标的坐标是大于零的还是小于零的,对应了按了上部还是下部,如果满足条件,鼠标的 y 坐标大于零,也就是按了上部,那就应该是用向上的造型了,而这个否则对应的其实就是鼠标的 y 坐标小于零或者等于零。这两 动情况,我们都算作是向下移动,给他换成向下的造型,按住鼠标不动,他就会保持向上或者向下的造型,松开的话,马上变成平飞的造型, 光是改造型还不够,平飞的时候呢,小猫其实没动,但是向上和向下是真的要发生移动的,只不过呢,他只改变了上下的位置,左右不变。所以这里呢,我们单独改变 y 坐标的部分,向上就把 y 坐标增加五,向下就把 y 坐标增加负五,相当于反向移动了。 接下来解决上天入地的问题,也就是当他到达最上方的时候,要让他瞬间移动到最下方,而移动到最下方的时候,反过来瞬间移动到最上方,这个也不难实现,就是在他每次移动之后呢,再加一个判断,如果当前的这个 y 坐标大于一百八了,也就是特别靠上的位置了, 那么我们就把它的 y 坐标在瞬间改成负一百八,让它到下边去。相反的,如果 y 坐标比负一百八还要小,说明它非常非常靠下,那我们就把它瞬间变成一百八,让它到最上边去,这样就能达到一个上天入地来回穿梭的效果了。我们来实际验证一下运行效果, 哎,运行起来就是这样了,接下来我们搞定不断向左移动的背景,也就是那些楼房,其实那些不是背景,而是一个角色,因为只有角色才能移动,但是我确实借用了一下背景里的图案, 新建一个空白的角色,然后呢在造型界面里面,把背景的这个城市的这个造型选中之后,复制一下,粘贴到我们新建的这个空白角色里去,这样我们就得到了一个 可以铺满整个舞台的造型。那么我们要如何利用这个造型来实现背景向身后移动的效果呢?先来看一个效果示意图, 红框代表我们的舞台,先把这个角色放在零零的位置上,铺满舞台,然后呢制造一个克隆体,把它放在舞台的右侧边缘,也就是四百八零的位置上, 然后让他们同时向左移动,就可以拼接出一个向背后移动的效果了。而当左侧的背景图完全移出舞台的时候,再让他瞬间移到最右边的位置上,如此循环往复,就得到一个连续不断的向背后移动的背景了。 具体的代码实现对齐之后呢,确定初始位置应该是零零,也就是屏幕的中央,然后立刻的克隆自己,克隆体启动之后呢,马上把自己的位置调到最右边,也就是四百八零。但是这里有一个小问题,就是 surprise 会限制角色的坐标 范围,虽然我们这个角色的造型已经很大了,但是还是不允许把它取到四百八这么大的位置上来,但是没关系,我们是有办法可以绕过这个限制的,我们给他增加一个既没有填充也没有边框的长方形, 这样你就看不到它,而且它的长度呢要远远大过四百八,这样就可以误导 scratch, 把它的限制呢放宽一些,它就可以取到四百八这样的位置上了, 克隆之后呢,就发出一条广播消息,然后接收这个消息,接收之后重复执行,把 x 坐标增加负四,这样就能够不断的向左移动了。而且要注意,这个时候接收消息的既是本体也是克隆体, 移动到一定程度之后,就要瞬间让他回到右边去,那这个一定程度呢,就是他的坐标等于负四百八,也就是刚好从左侧离开了舞台的范围,一旦判断到 x 坐标等于负四百八,马上移 移到四百八零这个位置上去,开始新一轮的向左循环移动。实际跑起来看看效果, 好像接缝的地方有点错位。检查一下啊,是我的这个克隆体的位置写错了,应该是四百八零这样。虽然小猫左右是没有移动的,但是有这个背景的参照,也能给大家带来一种动态的感觉。为了不让这个大角色挡住我们的小猫,需要在他一开始的时候就移到最后面,这样就能把小猫漏出来了。 移动的背景完成,接下来我们开始制作金币,金币的造型大家就可以自由发挥了。我这里呢就是画一个金色的圆,然后用线条稍微的在表面做一点装饰,记得调整一个合适的大小,不要太大也不要太小了。 金币的编码绿齐之后呢,先把它隐藏一下,因为我们还是要用到更多的克隆体本体,先隐藏给他一个初始位置,金币呢一定是在最右端刷出来的,所以他 它的 x 坐标呢,要尽可能的大,让它靠右。我们发现二百四是它的极限了,那 y 坐标我们不用管了,待会本来就要随机一个上下的位置, 因为要不断的产生克隆体,所以重复执行肯定是少不了了,还有克隆自己每次克隆之前要调整他的 y 坐标,把它设成一个学技术范围呢,我就设他是负一百到一百之间左右,位置就不用调整了,他现在已经在最右端了, 而且我希望金币不只是单个出现的,而是可以成排的出现,那么再给它套一层重复执行次数呢,是一个一到五之间的随机数, 每次克隆之后呢,等待一个零点一秒,目的是让他能够拉开一点距离,这样一组金币产生之后呢,也在等待一下,等待的时长呢是一和二之间的随机数,作为克隆艇启动呢,第一件事情就先把自己显示出来,然后重复执行,我要向左移动,这里呢 我们用把 x 增加负五的方式实现向左移动的效果,今天我们都没有使用移动加方向的方式,而这都在直接的调整坐标。 克隆体一个永远无法回避的问题就是什么时候删除克隆体?对于金币来说呢,当他运动到最左端的时候就应该删除了,但是这里我们不能用碰到舞台边缘,因为他一诞生的时候就已经碰到边缘了,所以要用坐标来进行判断,他最左端的坐标呢,就是负二百四,超不了这个数字了,所以直接判断 x 坐标等于负二百四,这个时候删除克隆体。另外一个需要删除克隆体的情况呢,就是碰到我们的小猫, 代表着小猫吃到了金币,所以还不能直接删除,删除之前得先做点工作,首先给他增加一个合适的音效,此刻是自带了一个金币,音效非常适合这里,这里有个关键问题,是播放声音还是播放声音并 等待呢?注意,因为我们下边就要删除扩容体了,所以得等待一下,不然的话,还没等播声音直接就删除了。除了播放声音,还得注意一点,这里要加分的,吃了金币要加十分,直接把它默认的这个我的变量改名字,改成分数, 使用变量一定要注意,他需要一个恰当的初始化分数吧,每一局开始的时候都应该是零分。这些动作都做完之后呢,我们要删除克隆体了,而因为这个播放时间的等待呢,会导致克隆体静止在那个位置上,所以呢,要让他删除之前先消失掉,那就是把它隐藏一下, 来验证一下刚才的代码。金币可以正常的产生,也能够正常的消失,也可以吃金币,但是这个金币的组合有点问题,并没有形成我们想象的一行金币,那么就来检查一下生成克隆体的代码有什么问题, 问题在于每次产生克隆体都调整了随机位置,而如果是一行的话,他的位置其实应该是相同的,所以把这个设置随机位置的代码呢,挪到重复执行的外边来,这次跟预选的效果就是一样的了。 来做最后一个角色就是我们的障碍物了,这部分呢,仍然是可以自由发挥了,那我这里呢,做了两个造型,大家可以做更多的造型, 第一个造型呢,是一个炸弹的造型,而第二个造型呢,是一个竖直的钉板。之所以要做一个竖直的造型呢,是因为我们这里的小猫可以上天入地,为了避免他躲在最上边或者最下边的位置卡 bug, 做一个上下长度高一点的造型来避免他卡 bug。 这里注意一下,我们这个造型的这个长度最好是大于三十,这样可以方便待会编码。其实障碍物角色的编码呢,跟刚才的金币是非常相似的, 绿奇之后也是先隐藏,然后确定一个初始位置,接下来还是要重复执行的,产生克隆体,但他不需要成组的出现障碍物了,每次都是单独的,所以只需要一成的重复执行就够了。 同样也还是在克隆之前呢,要调整随机的位置,他还要多一个,就是要调整随机的造型,换成造型里边也是可以嵌入一个随机数的, 那起点是一了,那最大值就是你有多少个造型就填多少,我呢是一到二就可以了,我只做了两个造型。还有一点小小的不同呢,就是这个等待呢,不放在后边,而是放在前边,这样一开始执行的时候就先做一个等待,不然的话呢就会在第一时间产生障碍物了。而这里呢,我们并不希望他上来就有障碍物, 等待的时间也设置的更长一些。作为克隆体启动之后,第一件事情仍然是显示,但是从不执行的部分。这次我们玩 有点不一样的,我们用一个重复执行执到他需要填入一个条件,是重复执行停止的条件,当满足这个条件的时候呢,就不再执行了,比如说我重复执行的吃米饭,直到吃饱为止, 那么我吃一口检查一下饱了没有,没饱继续吃,饱了停止。如果一开始就是饱的,那就一口也不吃。这里我们是希望炸弹呢,从不执行的向左移动,直到他的 x 坐标小于负二百四,也就是到达了最左端内部,同样是将 x 增加负五, 而删除合同体直接接在末尾就可以了。小猫这头呢,增加一个判断,如果碰到了我们的障碍物就结束游戏,停止全部脚本。最后在背景里增加一个背景音乐,可以选择 scart 提供的那些可循环的音乐。注意,这里一定要使用等待播完的模式。