地图 ( 墙壁碰撞侦测 )
这篇文章延续“绘制地图 ( 控制移动 )”文章,搭配广播消息和逻辑判断,实作角色在地图中移动,并且会被墙壁阻挡无法前进的效果。
相关文章参考:
打开范例
打开“绘制地图 ( 控制移动 )”的范例,从这个范例进行修改。
积木程序原理 ( 更新地图 )
打开范例后,先将 source 清单显示在舞台中,并将 source 的内容清空。
清空的方式可以在积木清单里,找到“删除清单的所有项目”积木,下拉选单选择 source,选择后点击该积木,就可以在不使用该积木的状态下,将 source 的内容清空。
使用试算表编辑地图的数组 ( 参考 绘制地图 ( 二维数组 ) ),并下载为 CSV,打开 CSV 文件,在每一行的前后加上双引号。
也可以直接使用 CSV 范例:文件下载
从舞台上,将 CSV 文件导入 source 清单。
点击绿旗,在舞台上可以看到二维数组产生的地图。
积木程序原理 ( 修改造型 )
切换到造型页签,将原本 a 和 b 的造型,更名为 wall 和 floor ( 方便后续识别 ),将 wall 调整为灰底黑框,floor 调整为白底。
加入边框后,长宽会变大,要再手动将长宽调整为 24x24。
造型编辑完成后,点击绿旗,舞台上就会变成有墙壁的地图。
积木程序原理 ( 橘色球 )
回到角色面板,使用绘图功能,新增一个 ball 的角色 ( 橘色原形、尺寸设定 24x24、对齐画布中心 )
切换到程序页签,新增 x 和 y 变数,在点击绿旗时,将 ball 移动到最上层,并将 x 设定为 12,y 设定为 0,将 ball 定位到 (x, y) 的位置。
为什么要使用 x 和 y 变数?因为待会会透过这两个变数判断是否碰到墙壁。
完成后,点击绿旗,橘色球就会出现在地图里。
积木程序原理 ( 碰到墙壁 )
点击正方形 box 的角色,按照下图,修改“显示”函数:
- 如果 list 的第 i 项等于 0,切换造型为 floor。
- 如果 list 的第 i 项等于 1:
- 切换造型为 wall。
- 继续判断如果 xy 座标等于变数 x 和变数 y,就发送广播消息 wall。
新增一个 state 变数,作为纪录键盘按键状态使用,在按下上下左右键时,分别将 state 设定为 up、down、left 和 right。
编辑收到 wall 消息的程序:
- 如果 state 等于 up,表示按“向上”时碰到墙壁,就执行“向下移”函数。
- 如果 state 等于 down,表示按“向下”时碰到墙壁,就执行“向上移”函数。
- 如果 state 等于 left,表示按“向左”时碰到墙壁,就执行“向右移”函数。
- 如果 state 等于 right,表示按“向右”时碰到墙壁,就执行“向左移”函数。
在墙壁角色盖印章的过程中,如果发现 ball 在墙壁的座标,就会执行反方向的动作,由于函数勾选了“执行完毕再更新画面”,所有的动作会在一瞬间完成,所以就像撞到墙壁,然后被墙壁卡住。
为什么要额外用变数 state 呢?因为如果将反向移动的程序写在移动的函数里,由于执行顺序的限制,会出现上下移动与左右移动互相干扰的状况,所以使用 state 来避开这个问题。
最后,点击 ball 角色,替 ball 角色加入碰到就讲话的效果。
完成效果
完成后,点击绿旗,按下键盘的上下左右,仿佛在控制橘色球在移动 ( 橘色球不动,但是地图在动 ),然后橘色求如果碰到墙壁会被卡住,并讲出“Oh!!!!”的文字。
范例解答
范例解答:绘制地图 ( 墙壁碰撞侦测 )
继续阅读
如果已经熟悉了绘制地图 ( 墙壁碰撞侦测 ) 的程序,就可以继续阅读“绘制地图 ( 吃东西侦测 )”的文章。
文章链接:绘制地图 ( 吃东西侦测 )
微信扫码关注
抖音扫码关注