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

【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程

  • 记录工作实践

  • 这是全新的系列,一直有个游戏制作梦

  • 感谢AI时代,让这一切变得可行

  • 长欢迎共同见证,期更新,欢迎保持关注,待到游戏上架那一天,一起玩

面向AI编程的godot独立游戏制作流程实录001

本期是第一篇 统领总纲

首先搞清楚大象长什么样子,也就是游戏是怎么跑起来的。

游戏开发的本质

一、指挥中心与部门

游戏是一个指挥中心(主循环),带着一群部门(功能模块)协同工作。

  • 指挥中心(主循环):负责每秒发出指令,协调所有部门。
  • 核心部门(核心模块):比如“玩家部门”“资源部门”“UI部门”,各自有自己的任务。
  • 子部门(拓展功能):比如“建造小组”挂在“资源部门”下。

这个比喻的好处是:

  • 强调协调性:指挥中心不自己干活,而是通过指令让各部门动起来。
  • 突出通讯:部门之间通过“报告”和“请求”交流。

二、主循环如何与其他部分通讯?

你提到“主循环通过API调用各个核心模块”,这个理解方向是对的!让我们拆解一下实际的运作方式。

  1. 主循环的角色
    主循环是游戏引擎(比如Godot)内置的“心脏”,它每帧(约1/60秒)运行一次,负责:
  • 检查输入(玩家按键)。
  • 更新状态(计算位置、资源)。
  • 渲染画面。

在Godot中,主循环由引擎管理,你通过特定的函数“插入”你的代码,比如:

  • _ready():游戏启动时运行一次。
  • _process(delta):每帧运行,更新逻辑。
  • _input(event):处理输入事件。
  1. 通讯的方式
    主循环并不直接“写信”给每个模块,而是通过节点树(Node Tree)和函数调用来通讯。Godot的节点系统就像一个组织架构图:
  • 主节点(指挥中心)是根节点。
  • 子节点(部门)挂在主节点下。

通讯机制:

  • 直接调用:主节点可以调用子节点的函数。
  • 信号(Signal):子节点可以向上“报告”事件。
  • 共享数据:通过变量在节点间传递信息。
  1. API和SDK的类比
  • API(应用程序接口):你可以把Godot的内置函数(比如move_and_slide())看作API。它们是主循环提供给你的“工具”,让你能指挥模块做事。

  • SDK(软件开发包):Godot整个引擎就是一个SDK,包含工具、函数、编辑器,帮助你开发游戏。

在你的游戏中,主循环通过这些“接口”调用核心模块,而不是手动写通讯代码。


三、实际代码中的通讯

让我们用一个简单例子,看看主循环如何与模块互动。
示例场景:采集游戏

  • 主节点:Main.tscn,负责协调。
  • 核心模块1:Player.tscn,控制玩家移动。
  • 核心模块2:ResourceManager.tscn,管理资源。
  • UI模块:UI.tscn,显示资源。
  1. 主脚本(指挥中心)
extends Node2Dvar resources = {"wood": 0} # 共享数据onready var player = $Player # 子节点:玩家部门
onready var resource_manager = $ResourceManager # 子节点:资源部门
onready var ui = $UI # 子节点:UI部门func _ready():print("指挥中心启动!")func _process(delta):player.update(delta) # 告诉玩家部门更新ui.update(resources) # 告诉UI部门显示最新数据func _input(event):if event.is_action_pressed("ui_select"):resource_manager.collect("wood", 1) # 通知资源部门加木材
  1. 玩家模块(Player.gd)
extends KinematicBody2Dvar speed = 100
func update(delta):var velocity = Vector2.ZEROif Input.is_action_pressed("ui_right"):velocity.x += 1move_and_slide(velocity * speed) # 使用Godot的API移动
  1. 资源模块(ResourceManager.gd)
extends Nodefunc collect(resource_type, amount):get_parent().resources[resource_type] += amount # 更新主节点的共享数据print("采集了", amount, resource_type)
  1. UI模块(UI.gd)
extends Controlfunc update(resources):$Label.text = "木材: " + str(resources["wood"]) # 读取共享数据并显示

四、实际运作过程
  1. 主循环启动:
  • Godot每帧调用Main.gd的_process(delta)。
  1. 通讯发生:
  • player.update(delta)让玩家移动。
  • 玩家点击鼠标,_input调用resource_manager.collect()加木材。
  • ui.update(resources)刷新屏幕上的木材数量。
  1. 结果:
  • 玩家感觉移动、采集、显示是“同时”发生的,因为主循环每秒跑60次。

文件关系

  • 有多个文件(Main.gd、Player.gd、ResourceManager.gd、UI.gd)。
  • 主循环通过节点引用($Player)或函数调用(collect())联系它们。
  • 不需要手动写“API”,Godot的节点系统已经提供了通讯框架。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程

记录工作实践 这是全新的系列,一直有个游戏制作梦 感谢AI时代,让这一切变得可行 长欢迎共同见证,期更新,欢迎保持关注,待到游戏上架那一天,一起玩 面向AI编程的godot独立游戏制作流程实录001 本期是第…...

发行思考:全球热销榜的频繁变动

几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…...

docker目录挂载与卷映射的区别

在 Docker 中,目录挂载(Bind Mount)和卷映射(Volume Mount)的命令语法差异主要体现在路径格式上,具体表现为是否以斜杠(/)开头。以下是两者的核心区别及使用场景的总结: …...

`label` 标签的 `for` 属性详解

一、基本概念 label 标签的 for 属性用于将标签与表单控件(如 input、select 等)绑定,其值需与目标元素的 id 完全匹配。这种关联允许用户点击标签时触发控件交互(如聚焦输入框或切换复选框),提升操作便捷…...

公开笔记:自然语言处理(NLP)中文文本预处理主流方法

在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型和子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法: 1. 基于预训练语…...

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …...

算法策略深度解析与实战应用

一、算法策略的本质与价值 算法策略是计算机科学的灵魂,它决定了问题解决的效率与质量。优秀的算法设计者就像战场上的指挥官,需要根据地形(问题特征)选择最佳战术(算法策略)。本文将深入剖析五大核心算法…...

【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】

美美超过管解 题目: 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 注…...

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号,也即MAC地址,也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 (每一个数可以用四个…...

在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口

Docker 的端口映射是一对一的,即一个外部端口只能映射到容器内部的一个端口。 1. 为什么不能多对一映射? 端口冲突: 如果外部多个端口映射到容器内部的同一个端口,Docker 无法区分外部请求应该转发到哪个内部端口,会…...

计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例

TCP与UDP区别 UDP:用户数据报协议,面向无连接,可以单播,多播,广播, 面向数据报,不可靠TCP:传输控制协议,面向连接的,可靠的,基于字节流&#xff…...

ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包

用linuxdeployqt打包太麻烦,每次程序编译都要用linuxdeployqt打包一次,而且每次都要很长时间,通过研究得出一个新的打包方法 1.用用linuxdeployqt得出依赖的库文件(只要没有增加新模块,只要用一次就可以) …...

【Python项目】基于深度学习的车辆特征分析系统

【Python项目】基于深度学习的车辆特征分析系统 技术简介:采用Python技术、MySQL数据库、卷积神经网络(CNN)等实现。 系统简介:该系统基于深度学习技术,特别是卷积神经网络(CNN),用…...

C++(初阶)(二)——类和对象

类和对象 类和对象类的定义格式访问限定符类域 实例化实例化概念内存对齐 this指针 类的定义 类(Class)是一种用于创建对象的蓝图或模板。它定义了对象(变量)的属性(数据)和方法(行为&#xff…...

JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–组成3–内置对象 2. 组成 一直都在说JS,JS,到底啥是JS有了解过吗?JS由哪几部分组成的呢? 定义: JavaScript是一种轻量级、解释型或即时编译型的编程语…...

ArcGIS操作:10 投影坐标系转地理坐标系

应用情景:在计算shp面质心坐标的时,由于需要的坐标是经纬度,所以需要将投影坐标系转化为地理坐标系 1、打开工具箱 2、右侧:数据管理工具 → 投影和变换 → 要素 → 投影 3、选择投影的数据、输出路径、地理坐标系,点…...

NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署

NVIDIA Jetson Nano的国产替代,基于算能BM1684X的AI算力盒子,支持deepseek边缘部署 另外,还提供BM1684XFPGAAI的解决方案。 核心板基于Sophon SG2300X SoC(也叫BM1684X)打造 带有8核ARM Cortex-A53 2.3GHz&#xff0c…...

c++全排列

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个场…...

VSCode 配置优化指南:打造极致高效的前端开发环境

VSCode 配置优化指南:打造极致高效的前端开发环境 一、基础环境配置:让开发更流畅 1. 性能优化设置 // settings.json {"files.autoSave": "afterDelay", // 自动保存(延迟1秒)"files.exclud…...

利用 ArcGIS Pro 快速统计省域各市道路长度的实操指南

在地理信息分析与处理的工作中,ArcGIS Pro 是一款功能强大的 GIS 软件,它能够帮助我们高效地完成各种复杂的空间数据分析任务。 现在,就让我们一起深入学习如何借助 ArcGIS Pro 来统计省下面各市的道路长度,这一技能在城市规划、…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...