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文件。运行时要保证两个文件处于同一路径下,否则会报错。 

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风痕天际

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值