使用系统提供的“移动”功能可以在指定方向上按指定距离移动对象。指定的两个点定义了一个矢量,用于指示选定对象要移动的距离和方向。例如,如果指定基点为(3,5)并在下一个提示下直接按
2025-09-29
贪食蛇游戏主要实现功能:WASD键或上下左右键控制蛇移动方向,吃到冰激凌加分,并且增长蛇身。游戏提供两种蛇的样式可选,而且有两种有无边界模式可选。记录当前得分和历史最高分。
1)场景搭建
新建2D工程,新建StartScene场景,Game场景设置为1 280×720大小,导入资源。我们使用UGUI制作UI及人物,开始界面效果(见图8-74)。Canvas要设置为Screen Sapce Camera模式(见图8-75)。
图8-74 开始界面
图8-75 Canvas设置
需要注意的是,皮肤和模式分别只能二选一,Toggle Group的Allow Switch off不能勾选(见图8-76)。
新建主场景MainScene,效果如图8-77所示。因为需要开发一个边界模式,新建四个对象,放入场景四边,并添加碰撞体,勾选Is Trigger。
图8-76 皮肤和模式选择
注意:四面墙分别命名为Up、Down、Left、Right,新建一个父对象统一管理。
2)实现思路
图8-77 主场景
图8-78 实现思路
如图8-78所示有两种主要方式可以实现蛇的移动:第一种方式,从蛇尾的最后一节开始,依次向前一节蛇身的位置移动;第二种,蛇头每向前移动一个位置,就将蛇尾的最后一节移动到蛇头刚才的位置。我们选择第一种方式,因为蛇有两种颜色相间的蛇身,如果第二种方式,会让蛇身的颜色混乱。
3)开发蛇头
图8-79 蛇头
新建一个Image,命名为SnackHead,Source Image修改为蛇头图片,长宽设置为45×45,添加Rigidbody2D和BoxCollider2D组件,勾选Is Trigger,为其添加一个空的父物体Snack,方便管理蛇头和以后添加的蛇身(见图8-79)。
在SnakeHead上挂载脚本SnakeHead.cs。首先实现蛇头的移动、转头、空格键加速操作。实现主要思想,InvokeRepeating方法持续间隔一定时间调用控制蛇头移动的Move方法,然后Update方法监听按键,判断蛇头移动的XY增量。并实现蛇头转向,利用InvokeRepeating的间隔调用时间来控制蛇头移动的速度。需要注意根据实际情况设计蛇头移动步长Step的大小,最好能让蛇头在有限范围内移动整数步。
4)食物生成(https://www.chuimin.cn)
开发食物,新建一个Image,命名为SnackBody,source image设置为任意的食物图片,长宽设置为35×35,添加Box Collider2D,勾选is trigger,需要注意碰撞器大小设置稍微小一点,防止蛇头擦肩而过的时候,发生碰撞,标签设置为Food,最后设为预制体(见图8-80)。
设置步长step为30px,计算后得到世界坐标中心点到四周的步数,但为了防止出现食物“卡”在边缘(见图8-81),将步数各减一步。
图8-80 食物开发
图8-81 “食物”卡住
在Canvas下设置一个子物体FoodRoot,挂载脚本FoodCreator.cs。将FoodCreator设置为单例模式,只需实例化一次,方便调用。我们规定游戏开始,就生成一个食物,蛇每吃掉一个食物就随机生成其他食物,并有一定概率生成特殊奖励。特殊奖励的预制体和食物制作差不多。
5)处理蛇身的生成
蛇身SnakeBody的制作和前面类似,tag设置为Body,设为预制体。我们使用List<Transform>来存储蛇身,需要注意引用命名空间using System.Collections.Generic。在SnakeHead.cs中新增AddBody()方法,然后添加OnTriggerEnter2D()用于触发检测,当碰到食物或者奖励的时候,调用AddBody()方法,实现蛇吃食物增加蛇身的功能。
6)实现蛇移动
实现方法如图8-82所示。
将前一节的位置赋值给后一节,实现蛇身的移动
图8-82 蛇身移动
在SnakeHead类中添加Move方法,使用List<Transform>记录蛇尾的位置信息。
最终效果预览如图8-83所示。
图8-83 效果预览
图8-84 project列表
相关文章
使用系统提供的“移动”功能可以在指定方向上按指定距离移动对象。指定的两个点定义了一个矢量,用于指示选定对象要移动的距离和方向。例如,如果指定基点为(3,5)并在下一个提示下直接按
2025-09-29
图4-14 SFC21功能示意表4-23 SFC21的输入输出参数如果将一个结构作为输入参数传送,STEP 7总是把一个结构的长度定义为偶数个字节数。否则,CPU在调用SFC 23时将启动OB121。此SFC查询所选数据块的数据字节数并检查其是否为只读数据块。如果相同编号的数据块已存在于工作存储器和/或装载存储器中,或者该数据块为复制得到的,则SFC终止运行,并生成一条故障消息。......
2025-09-29
1)案例简述这个案例实现一个非常简单的拾取宝物游戏,主角是一个小球,玩家通过键盘控制小球拾取全部宝物。这是因为,记录分数的text只需要更改其显示内容,即只对它的text组件进行操作,因此只需要获得它的text组件;而winText不同,我们需要它在游戏胜利时显示出来,也就是控制一整个对象,因此需要获得整一个GameObject。......
2025-09-30
While循环可以反复执行循环体的程序,直至到达某个边界条件。图2-34 While循环示意图图2-35 While循环示意图While循环位于结构选板。松开鼠标时,While循环的边框将包围选中部分。只需将对像拖放到While循环内部即可为其添加程序框图对象。因此,While循环的控制量应该在循环内产生。图2-37为合理使用While循环的方法。但这并不能保证While循环真正的合理运行。解决这个问题的简单办法就是在While循环中插入延时节点。......
2025-09-29
ALOHA采用的这种介质访问方法,即载波监听多路访问。CSMA技术是纯ALOHA和分片ALOHA的一种协议改进。由于采用了附加的硬件装置,每个站都能在发送前监听信道介质上是否有发送帧存在。CSMA/CD算法使每个站在发送帧期间,同时有检测冲突的能力。为了决定这个随机时间,一个通用的退避算法称为二进制指数退避算法。令牌总线介质访问控制应具有如下功能:令牌传递算法。......
2025-09-29
图3-34 原始图形图3-34 原始图形在功能区“默认”选项卡的“修改”面板中单击“修剪”按钮,根据命令行提示进行以下操作。图3-39 修剪示例a)选择剪切边 b)修剪对象 c)修剪结果图3-39 修剪示例a)选择剪切边 b)修剪对象 c)修剪结果......
2025-09-29
引导运行功能是当PLC电源开启或从STOP→RUN时,把标准ROM或存储卡中的文件向程序存储器进行自动传输的功能。图8-8 方法1图8-9 方法2图8-10 清空程序数据5.电源复位或STOP→RUN6.“BOOT”指示灯亮如果CPU正面的“BOOT”指示灯亮表示引导运行工作正常。2)引导运行开始至进入运行状态时为止,大约需要2~3s。......
2025-09-29
图6-78 缓冲存储区批量监视4.软元件测试在监控状态中,可改变位软元件和字软元件的当前值来调试程序,软元件测试画面如图6-79所示。软元件监视功能除了可进行顺序控制程序的调试外,还可用于检测输出接线是否正确。......
2025-09-29
相关推荐