当前位置: 首页 > news >正文

Godot学习笔记8——PONG游戏制作

目录

一、小球

二、地图 

三、积分系统 

四、玩家场景

五、导出与发布 


PONG是1972年由雅达利公司推出的游戏,主要玩法为玩家控制两个可以上下移动的板子击打屏幕中不断运动的球 

一、小球

我们首先创建一个“Area2D”场景,在它下方创建“CollisionShape2D”和“Sprite2D”两个子节点:

 

在“CollisionShape2D”中,我们把“Shape”属性设置为“圆形”,在“Sprite2D”中把“Texture”属性设置为资源中的小球图形:

 

之后,我们调整“CollisionShape2D”的大小,按住红色小点拖动,使其更贴合图片尺寸:

之后,我们在资源文件夹中右键新建文件夹,将小球场景保存: 

 

 

完成后应该是这个样子:

 

接着,我们在“Area2D”上挂载一个脚本:

这里,我们让小球的位置每一帧加一个二维向量(1,0),将小球放在场景中间位置点击运行,即可看到如下结果:

可以看到小球在向右运动。 

现在,我们需要让小球按任意方向移动,需要在外部添加新的变量:

这里,我们定义了一个二维向量“vec”,并给它赋值(5,5),保存运行后,小球将会向右下移动:

 接下来,我们还需要为小球添加其他功能,例如当小球触碰到左右墙壁时,让小球回到屏幕中间位置:

这里,我们首先定义了一个名为“init_position”的变量用来存放小球的初始位置,在“_ready”函数中,当小球初次被加载时将小球位置记录到该变量内。同时,我们自定义了一个名为“resest()”的函数,功能是让小球的位置为初始位置。在“_process()”函数中,我们加了一个if条件判断,如果小球当前的x大于500,那么就让它回到初始位置。运行后会看到小球确实回到了初始位置:

之后,我们将if删掉,把小球放回原点(0,0)处,再次保存场景,小球场景就制作完毕了。

二、地图 

在资源管理器中,我们新建一个文件夹命名为“地图”,在里面新建一个“map”场景。在场景中新建两个“ColorRect” ,一个颜色为黑色,大小为1152×648,位置在(0,0);另一个颜色为白色,大小为3×648,位置在(576,0):

 为什么选取1152和648,是因为项目的屏幕大小就这样,我们可以在“项目——项目设置”里更改项目窗口大小:

接下来创建墙壁,和小球类似,我们创建一个“Area2D”,并在它之下创建子节点“CollisionShape2D” ,形状选择矩形,并调整相应位置与大小。创建好一个后按住“ctrl+D”可以快速复制节点与其子节点,将第二个墙壁也放在对应位置:

接着,我们来为墙壁挂载脚本。

首先,我们需要在小球脚本内的“_ready”函数中加一句:

self.add_to_group("Ball")

在小球被加载时,将会把小球加入到一个名为“Ball”的组内。

之后,在墙壁挂载如下内容: 

 在“_process”函数中,我们用for来遍历“get_overlapping_areas()”函数返回的内容,按住“ctrl”单击函数即可查看对应内容:

简单来说,对于每一个进入墙壁判定框的Area2D节点,我们都会判断其是否属于“Ball”组,如果属于,则调用自身的复位函数,使其回到屏幕中央。

为两个墙壁都挂载相同脚本,点击场景栏左上角链接按钮实例化场景,将小球场景添加进来,并调整位置至屏幕中间,点击运行:

可以看到小球在触碰到左右墙壁后可以正常复位。

接着我们来创建上下墙壁,基本方法与左右墙壁一致:

我们为上下墙壁挂载脚本:

这里没什么好讲的,当触碰到以后就让小球的速度加一个y方向的5,使小球向下移动。在脚本前面我们定义了一个变量y,并使用“@export”使其能在属性栏显示,我们可以看到上墙壁的属性栏多了一个来自“上墙壁.gd”的可调节项“Y”。我们为下墙壁也挂载相同的脚本,并将该值设置为-5。 

三、积分系统 

在资源文件夹内创建一个名为“积分系统”的文件夹,在里面创建一个脚本:

并使用上节讲过的知识创建单例:

之后,我们打开小球脚本加入如下代码:

这样,在每次调用复位函数时,可以判断小球是从哪个方向飞入墙壁的,从而更改计数的值。 

接着,我们创建一个文件夹,并在里面创建一个积分场景。添加两个“Label”节点,调整到合适位置,并添加如下脚本:

另一个显示玩家2的分数,“score1”改为“score2”即可。

接着,用和小球场景相同的方法把积分场景也加载到地图场景中:

 

点击运行,即可看到如下内容:

但可以看到,在小球碰到墙壁反弹时,计分板不止加了一分,这是因为在编写左右墙壁脚本时,我们的加分判断没有放在物理处理帧率中,而是放在了画面刷新帧率。要解决这个问题,我们只需要将“_process”中的代码复制粘贴到“_physics_process”中即可:

再次运行,可以看到积分系统恢复正常了。 

四、玩家场景

首先,我们先来添加玩家的键位映射:

 之后,与创建小球时一致,创建玩家1的反弹杆:

之后,在“Area2D”中挂载如下脚本:

 

另一个玩家的脚本与此大抵相同,只不过与球碰撞时给予的加速度为-3。

在这里,为了防止球拍出界,我们设定了一个-324到324的范围,只有在这个范围里面移动才会被加入坐标。

之后,与小球场景类似,将玩家1与玩家2的场景加载到地图场景中,适当调整位置:

到这里,游戏就已经基本完成了。

五、导出与发布 

点击“项目——导出”,添加Windows模板,这里会提示缺少导出模板,我们点击报错信息的管理模板,下载模板即可:

不过,现在我在这里无法下载到导出模板,并且找不到解决办法,唯一的途径就是手动下载:

下载红线划住的即可。 

下载好后,点击从文件安装,选择刚才下载好的文件即可。

导出成功后,即可看到文件夹里的.exe文件和.pck文件。运行时要保证两个文件处于同一路径下,否则会报错。 

http://www.lryc.cn/news/417435.html

相关文章:

  • 软件RAID配置实战(2个案例场景)
  • # 基于MongoDB实现商品管理系统(2)
  • 国标GB28181视频平台LntonCVS视频融合共享平台视频汇聚应用方案
  • java基础I/O
  • 关于“八股文”在程序员面试中的角色及其对工作实际效用的讨论
  • 【算法设计题】基于front、rear和count的循环队列初始化、入队和出队操作,第6题(C/C++)
  • 端点区间影响
  • Leetcode3224. 使差值相等的最少数组改动次数
  • thinkphp之命令执行漏洞复现
  • 算法板子:匈牙利算法——二分图的最大匹配
  • 轻松拯救数据危机!四大必备的数据恢复软件免费版推荐!
  • windbg常用命令
  • Ubuntu(20.04 LTS)更换镜像源
  • golang使用 copier对象复制时进行类型转化
  • 英特尔18A制程技术分析解读
  • 【百度面试算法题】2024-08-02
  • OSPF基础
  • leetcode 958.二叉树的完全性检验
  • Spring 中请求作用域的数据存储在 ThreadLocal 中还是 Spring 容器中?
  • 基础岛 - 8G显存验证书生·浦语大模型的Demo
  • Jangow靶机攻略
  • Vue项目通过宝塔部署之后,页面刷新后浏览器404页面
  • Java一一一简易图书管理系统
  • Ubuntu配置carla docker环境
  • 超越sd3!比肩Midjourney-v6?AI绘画大模型FLUX1.0详细评测与本地部署方法(附安装文件)
  • 帆软填报报表单元格根据其它单元格内容决定另外的单元格可筛选什么值
  • 一键浪漫的回忆:微软开源的修复工具!!【送源码】
  • 力扣-240.搜索二维矩阵(2)
  • Python推导式和生成器表达式
  • 比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法