Godot4.3类星露谷游戏开发之【简易库存】(逻辑部分)

用godot4.3 C#开发一个APP登陆界面 二、因为自己的是新手,我再下载cursor进行智能编程,用其跟visual studio 2022及net 8.0进行开发。https://www.cursor.com/,在使用这一个工具后,让我对程序员这一个行业充满了失落。这里中登陆后进行的下一个界面的跳转。godot 是一个游戏开发平台,可以用gd语言,这一个类似python,python程序员转gd很容易,也可以用C#开发。四、在godot开发中相关的开发习惯跟原来php 一类的不太一样,界面设计好后点选相关界面或按钮一类的进行角本挂载。 阅读详情

千里之行,始于足下

零、 笔记

制作简易库存,用于存放被收集的物品。在Godot4.3类星露谷游戏开发之【简易库存】(UI部分)的基础上,本章将进一步打通从 “收集物品” 到 “更新物品槽 UI 表现” 与 “同步物品字典数据” 的完整逻辑链;

请添加图片描述

一、设计架构

在Godot4.3类星露谷游戏开发之【可收集物品】中,我们​​采用组件化思想,设计并创建了 可收集组件.tscn 。该组件可以作为任意物品的子节点,赋予物品可收集的功能。​现在,为了实现物品被收集后,同步变更物品数据的目标,设计架构如下:

发送收集请求
同步数据变更
可收集组件:
检测碰撞,触发收集
库存管理器:
管理数据,同步变更
库存UI:
展示物品,响应变更

二、附加脚本

(一)更新——可收集组件.gd

class_name 可收集组件
extends Area2D

signal 已收集

@export var 物品名: String
var 物品纹理: Texture2D


func _on_body_entered(body: Node2D) -> void:
	if body.is_in_group("玩家"):
		# 更新库存物品数据,将物品添加到库存面板物品槽
		物品纹理 = get_parent().texture
		if InventoryManager.尝试添加物品(物品名, 物品纹理):
			已收集.emit()
			get_parent().queue_free()
		else:
			print("物品槽已满,无法收集")

(二)库存管理器.gd(单例)

第一步,在路径 res://脚本/全局脚本/ 下创建独立脚本 库存管理器.gd ;

extends Node

signal 库存变更(物品字典, 物品纹理字典)  # 使用 Texture2D 类型

var 库存: Dictionary = {}  # 键: 物品名, 值: [数量, Texture2D]
var 占用槽位: int = 0  # 实时记录已占用的槽位数(数量>0的物品)

# 尝试添加物品到库存,返回是否成功
func 尝试添加物品(物品名: String, 物品纹理: Texture2D) -> bool:
	# 已有物品:增加数量
	if 库存.has(物品名):
		库存[物品名][0] += 1
		更新并发送库存信号()
		return true
	# 新物品:检查物品槽是否有空位
	elif 占用槽位 < 6:
		库存[物品名] = [1, 物品纹理]
		占用槽位 += 1  # 新增物品,槽位计数+1
		更新并发送库存信号()
		return true
	else:
		print("添加失败:物品槽已满(最多显示6种物品)")
		return false

# 尝试从库存中移除物品,返回是否成功
func 尝试移除物品(物品名: String, 数量: int = 1) -> bool:
	if not 库存.has(物品名):
		return false
	
	库存[物品名][0] -= 数量
	if 库存[物品名][0] <= 0:
		库存.erase(物品名)  # 数量为0时移除物品
		占用槽位 -= 1  # 物品移除,槽位计数-1
	
	更新并发送库存信号()
	return true

# 内部方法:更新并发送库存信号
func 更新并发送库存信号():
	# 准备要发送的数据
	var 物品字典 = {}
	var 物品纹理字典 = {}
	
	# 构建物品数量字典和物品纹理字典(此时库存中所有物品数量都>0)
	for 物品 in 库存.keys():
		物品字典[物品] = 库存[物品][0]  # 物品名: 数量
		物品纹理字典[物品] = 库存[物品][1]  # 物品名: 纹理
	
	库存变更.emit(物品字典, 物品纹理字典)  # 发送变更信号    

第二步,打开 项目->项目设置->全局,设置该脚本为 单例,并命名节点名称为 InventoryManager ;

在这里插入图片描述

(三)库存UI.gd

切换到 库存UI.tscn 场景,选中根节点 库存UI ,附加脚本;

extends NinePatchRect

# 物品槽UI元素引用(保持用户定义的变量名)
@onready var 物品纹理: TextureRect = $"MarginContainer/HBoxContainer/物品槽/物品纹理"
@onready var 物品数量: Label = $"MarginContainer/HBoxContainer/物品槽/物品纹理/物品数量"
@onready var 物品纹理2: TextureRect = $"MarginContainer/HBoxContainer/物品槽2/物品纹理2"
@onready var 物品数量2: Label = $"MarginContainer/HBoxContainer/物品槽2/物品纹理2/物品数量2"
@onready var 物品纹理3: TextureRect = $"MarginContainer/HBoxContainer/物品槽3/物品纹理3"
@onready var 物品数量3: Label = $"MarginContainer/HBoxContainer/物品槽3/物品纹理3/物品数量3"
@onready var 物品纹理4: TextureRect = $"MarginContainer/HBoxContainer/物品槽4/物品纹理4"
@onready var 物品数量4: Label = $"MarginContainer/HBoxContainer/物品槽4/物品纹理4/物品数量4"
@onready var 物品纹理5: TextureRect = $"MarginContainer/HBoxContainer/物品槽5/物品纹理5"
@onready var 物品数量5: Label = $"MarginContainer/HBoxContainer/物品槽5/物品纹理5/物品数量5"
@onready var 物品纹理6: TextureRect = $"MarginContainer/HBoxContainer/物品槽6/物品纹理6"
@onready var 物品数量6: Label = $"MarginContainer/HBoxContainer/物品槽6/物品纹理6/物品数量6"

# 物品槽UI元素数组(使用正确的变量名初始化)
var 物品图片数组 = []
var 物品数量数组 = []


func _ready():
	# 初始化物品槽数组(修正变量引用)
	物品图片数组 = [物品纹理, 物品纹理2, 物品纹理3, 物品纹理4, 物品纹理5, 物品纹理6]
	物品数量数组 = [物品数量, 物品数量2, 物品数量3, 物品数量4, 物品数量5, 物品数量6]
	
	# 连接库存变更信号
	InventoryManager.库存变更.connect(_on_库存变更)


func _on_库存变更(物品字典, 物品纹理字典):
	# 清空所有物品槽显示
	for i in range(6):
		物品图片数组[i].visible = false
		物品数量数组[i].text = ""
	
	# 更新有物品的槽位
	var 物品索引 = 0
	for 物品名 in 物品字典.keys():
		if 物品索引 >= 6:
			break
			
		var 数量 = 物品字典[物品名]
		var 纹理: Texture2D = 物品纹理字典[物品名]  # 明确指定 Texture2D 类型
		
		# 设置物品图片
		if 纹理:
			物品图片数组[物品索引].texture = 纹理
			物品图片数组[物品索引].visible = true
			
		# 设置物品数量(始终显示,不隐藏)
		物品数量数组[物品索引].text = str(数量)
		
		物品索引 += 1    

三、搭建测试环境

第一步,参考Godot4.3类星露谷游戏开发之【可收集物品】,创建多个可收集物品;

在这里插入图片描述

第二步,选中各个可收集物品场景中的 可收集组件 节点,并在检查器中填上 物品名 ,这里以 蛋.tscn 为例;

在这里插入图片描述
在这里插入图片描述
第三步,将可收集物品添加到 测试_简易库存.tscn 场景中,完成测试场景搭建;

在这里插入图片描述

四、测试

运行 测试_简易库存.tscn 场景,并收集所有可收集物品以测试;

请添加图片描述
发现收集木屋时,库存UI变形!据此可以定位到 库存UI.tscn 场景存在问题,采取措施如下:
回到 库存UI.tscn 场景中,分别选中各个 物品纹理 节点,更改 Expand Mode 为 Ignore Size,更改 Stretch Mode 为 Keep Aspect Centered ;

在这里插入图片描述
再次运行场景,问题得到解决;

请添加图片描述
测试完成!

五、免费开源资产包

精灵包链接:点击此处
UI包链接:点击此处

  1. 进入链接后点击下图按钮;
    下载

  2. 然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载);
    No thanks,just take me to the downloads

  3. 最后点击下图按钮完成下载(注意导入前需解压缩)。
    下载

Godot 4.3 2D开发入门:从下载到可复用工作流 Godot 是一款面向2D游戏开发的开源引擎,其核心优势在于轻量、自包含与渲染管线透明。基于 Vulkan 的 2D 渲染器支持 Pixel Snap 和 Filter 控制,直接决定角色运动清晰度与纹理采样质量;而节点驱动的场景结构让渲染、输入、物理调度高度内聚。技术价值体现在零环境配置、实时编辑即运行、多层级本地化机制,显著降低独立开发者与美术策划的工程门槛。典型应用场景包括像素风游戏、教育类互动课件、原型快速验证等。本文围绕 Godot 4.3 稳定版,聚焦 godot下载、2d光栅滤波器、2d人物走 阅读详情

相关推荐

Godot4.3类星露谷游戏开发之【工具切换】

实现玩家角色工具切换,按下U、I、O后,分别执行砍树、浇水、锄地等动作,附完整项目代码+开源像素素材包。

ForBigData的博客 1143

【手把手带你Godot游戏开发】FlappyBird:4.3无限地面之文艺青年(shader)版

本章节效果图 原理 这种方法是通过Shader的UV动画实现的 步骤 重新导入素材 shader_type canvas_item; render_mode unshaded; uniform float speed : hint_range(0.00,1.00) = 0.0; void vertex(){ UV.x += speed*TIME; } ...

开发游戏的老王 4098

使用Godot 4从零复刻《星露谷物语》核心玩法:实战开发指南

在游戏开发领域,2D像素风模拟经营游戏因其独特的艺术风格和深度的玩法循环而备受青睐。这类游戏的核心通常围绕资源管理、地图交互和成长系统构建,其实现依赖于高效的2D渲染、精确的碰撞检测以及复杂的状态与数据管理。Godot引擎,特别是其4.x版本,凭借其卓越的2D工作流、节点化场景系统和易上手的GDScript脚本语言,成为实现这类游戏逻辑的理想选择。通过将游戏世界分解为可交互的瓦片地图(TileMap),并利用其数据层(Data Layers)管理地形属性,开发者可以高效地实现耕种、采矿等核心交互。同时,结合

weixin_34345753的博客 354

Godot4.3类星露谷游戏开发之【简单开始界面】

使用Node2D节点和Button节点制作简易游戏开始按钮

ForBigData的博客 1961

Godot 4 开发《星露谷物语》风格农场游戏:从零实现核心系统

2D像素风游戏开发是独立游戏和初学者入门的常见选择,其核心在于高效管理游戏对象、状态与资源。Godot引擎以其轻量、开源和节点化架构,为这类游戏的快速原型开发提供了强大支持。通过其内置的TileMap系统、GDScript脚本语言和信号机制,开发者可以高效构建可交互的世界、管理游戏状态并实现数据驱动的设计。这在模拟经营、角色扮演等需要复杂系统交互的游戏类型中尤为关键,能显著提升开发效率与项目可维护性。本教程聚焦于利用Godot 4的新特性,如改进的TileMap工作流和GDScript 2.0,从零搭建一个

weixin_30645617的博客 399

用Godot 4复刻《星露谷物语》核心玩法:从零搭建2D农场模拟游戏原型

游戏引擎是游戏开发的基础工具,它通过提供渲染、物理、脚本等核心模块,将创意转化为可交互的数字体验。在众多引擎中,Godot以其开源、轻量和节点化架构脱颖而出,特别适合2D游戏的快速原型开发。其独特的场景(Scene)与节点(Node)系统,让开发者能够像搭积木一样组合游戏对象,显著提升了开发效率。对于模拟经营、农场养成这类注重系统复杂度和内容深度的游戏类型,Godot 4强大的2D渲染管线、直观的TileMap编辑器以及高效的GDScript语言,能够帮助开发者快速验证核心循环,如资源采集、时间管理和背包系

weixin_34151004的博客 320

Godot 4 开发像素风农场模拟游戏:从网格地图到农业循环的实战指南

在游戏开发领域,2D网格地图与状态管理是构建模拟经营、RPG等类型游戏的核心基础技术。其原理在于将游戏世界划分为离散的网格单元,每个单元承载特定的属性与状态数据,通过坐标转换与数据查询实现玩家与环境的精确交互。这项技术的价值在于能够高效组织复杂的游戏逻辑,如耕种、建造、资源管理等系统,是实现《星露谷物语》这类游戏深度玩法循环的基石。在应用场景上,它广泛适用于农场模拟、策略建造、地牢探索等需要基于格子进行逻辑运算的游戏类型。本文以 Godot 4 引擎为例,深入探讨如何利用其 TileMap 节点与自定义数据

weixin_33829657的博客 290

Godot 4 实战:从零构建像素风农场模拟游戏核心系统

2D游戏开发中,TileMap系统是构建网格化世界的核心技术,它通过图块(Tile)与自定义数据层(Custom Data Layers)高效管理地形与交互逻辑。其原理是将游戏世界划分为网格,每个图块携带属性数据(如是否可通行、可耕种),从而实现数据驱动的游戏逻辑。这一技术价值在于极大提升了地图编辑效率与游戏逻辑的灵活性,尤其适用于农场模拟、策略、RPG等需要复杂地图交互的场景。结合Godot 4的信号(Signal)与单例(Singleton)机制,可以优雅地实现全局游戏时间系统与模块化交互。本文以复刻《

weixin_30808693的博客 436

Godot4.3类星露谷游戏开发之【实现玩家移动】

使用Godot引擎实现2D角色基础移动控制,通过输入映射绑定WASD按键,根据移动向量切换四方向行走动画,记录最后朝向播放对应空闲动画,集成相机跟随功能,并附Sprout Lands像素素材包获取教程。

ForBigData的博客 1895

Godot动态库存系统:模块化架构与游戏物品管理实践

在游戏开发中,库存系统是管理游戏物品、装备和资源的底层数据架构与交互逻辑的核心模块。其设计原理通常遵循数据与表现分离、事件驱动通信等软件工程范式,以实现松耦合和高可维护性。这类系统的技术价值在于为角色扮演、生存冒险等游戏类型提供了可扩展的物品管理基础,能显著提升开发效率并降低后期维护成本。应用场景广泛,从背包、装备栏到合成、任务系统均依赖于此。本文以Godot引擎的开源动态库存系统为例,深入解析其如何通过模块化设计,将物品数据、库存槽位与UI组件解耦,并利用Godot的Resource和Signal系统,高

weixin_42676876的博客 340

Godot动态物品栏系统:数据驱动与信号解耦的背包解决方案

在游戏开发中,物品栏系统是管理游戏状态和玩家交互的核心模块,其设计直接影响游戏的体验与可维护性。其核心原理在于实现数据层与表现层的分离,通过资源(Resource)管理物品属性,通过节点(Node)构建UI组件,两者通过观察者模式保持同步。这种架构的技术价值在于提供了高度的模块化和可扩展性,使开发者能专注于游戏逻辑而非底层实现。应用场景广泛,从RPG的网格背包到生存游戏的合成台,都需要处理物品的增删、堆叠、拖拽和跨容器交互。本文探讨的Godot动态物品栏系统,正是基于信号(Signal)机制实现松耦合通信,

weixin_42566072的博客 414

Godot4.3类星露谷游戏开发之【创建玩家角色】

本教程指导使用Godot引擎创建玩家角色:导入精灵图资源包,构建以CharacterBody2D为根节点的场景,添加AnimatedSprite2D配置四方向空闲/行走动画,设置CollisionShape2D胶囊碰撞体,调整纹理渲染模式避免模糊,最终完成具备基础动画和物理交互的角色。教程附开源精灵图资源(Sprout Lands Asset Pack)获取方式。

ForBigData的博客 1671

Godot 4.3 2D游戏开发全流程:从零到发布的实战指南

游戏引擎是游戏开发的核心工具,它通过封装底层图形、物理和音频等系统,为开发者提供高效的创作环境。其工作原理在于将游戏对象抽象为可组合的节点或实体,并通过脚本语言驱动逻辑,从而实现复杂的交互体验。掌握一款引擎能极大提升开发效率,降低技术门槛,尤其对于独立开发者和小型团队而言,是快速实现创意、构建可玩原型的关键。在众多引擎中,Godot以其开源、轻量和节点化架构脱颖而出,特别适合2D游戏开发。本文聚焦于Godot 4.3版本,深入解析其针对2D开发的优化特性,如强大的TileMap系统和直观的GDScript脚

weixin_34082695的博客 410

Godot4.3类星露谷游戏开发之【生长的小麦】

本教程讲解如何在Godot 4.3中构建小麦生长系统:通过时间管理组件驱动作物分阶段成长(发芽/成长/成熟),利用动画帧切换实现视觉变化,集成碰撞检测与掉落物生成机制。核心步骤包括创建带生长状态机的作物场景、配置时间监听信号、设置阶段变更事件,最终通过测试场景验证浇水后小麦的动态生长效果。文内附完整开源精灵包资源+脚本,完整呈现种植系统核心逻辑。

ForBigData的博客 1731

强化学习实战:如何用PPO算法训练一个超级马里奥AI(附完整代码)

本文提供了一份详细的强化学习实战指南,教你如何使用PPO算法训练一个能玩《超级马里奥》的AI智能体。内容涵盖从环境搭建、自定义奖励函数设计到PPO智能体的PyTorch完整实现,并附有可运行的代码,帮助开发者快速上手游戏AI开发。

h6j7k8l9p0的博客 946

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

10.Godot Input与自定义单例的使用

创建一个新脚本在项目设置中选择 Autoload。选择脚本路径右边可以修改单例的名称点击添加AA的单例就被添加到游戏中可以识别AA单例ctrl点击进去,会转到刚才新建的脚本文件里可以在其中自定义变量和函数可以进行访问和调用可以在任意一个脚本中对它们进行直接访问用于记录全局变量。

ChoSeitaku的博客 3682

AES128加密算法开发(含源码)

本文详解了AES128加密算法的原理与C语言实现。AES128是当前广泛使用的对称加密标准,采用128位密钥和10轮变换,具有高安全性和高效性。文章从算法背景、核心概念(混淆与扩散)入手,详细解析了4×4状态矩阵表示、4个核心变换(字节替换、行移位、列混合、轮密钥加)以及密钥扩展过程。特别针对汽车电子应用场景,如ECU通信加密、车钥匙认证等,说明了AES128在资源受限环境中的优势。通过分步图解和原理剖析,帮助开发者深入理解这一加密标准的技术细节与实现方法。

汽车电子软件开发笔记 2916

Godot学习笔记7——Input单例与自定义单例

我们也可以在项目中自定义一个单例,只需要在项目文件中新建一个脚本,并写入如下代码:接着,我们来到“项目”-“项目设置”-“自动化加载”,将我们的脚本加入进去:点击路径右侧的文件夹按钮即可选择脚本,在节点名称处可以自定义名称。接着,我们在刚才“Sprite2D”挂载脚本下写下如下代码:运行后可以看到,它将a变量所代表的值和b函数都执行了一遍。

fengtian65的博客 973

解决Word中英文混排的5个常见排版问题(含单词换行、间距调整等)

本文详细解析Word中英文混排的5大常见排版问题,包括单词换行、间距调整、标点混用等,提供专业解决方案。通过设置段落格式、调整兼容性选项和使用字体组合等技巧,帮助用户轻松解决文档排版难题,提升专业性和阅读体验。

vim8coder的博客 1333

死磕GMSSL通信-java/Netty系列(二)

Netty-tcnative再linux编译比较好编译,但是再window编译,我尝试了各种办法,总是编译失败,所以我采用半自动的方式进行编译,Netty-tcnative会生成临时文件,直接用vs打开,设置openssl的头文件和静态库路径,然后生成静态库,静态库改个名字放到jar包里边,其实自动编译也是这个原理哈哈O(∩_∩)O。直接传输五个证书的路径吗,之前有的是说要转成x509之类的,转来转去的有点麻烦,这个是直接传输证书路径,由底层gmssl去解析,格式必须是pem格式。然而,若项目已依赖于。

qq_36577699的博客 3025

godot4实现一个单例类,作为公共数据共享类

转到 "Project" > "Project Settings" > "AutoLoad",并添加你刚刚创建的脚本。为它提供一个名称(例如 "GlobalData"),并指定脚本的路径。1. 创建一个新的 GDScript 文件,例如 `GlobalData.gd`,并在其中定义你想要共享的变量和函数。在 Godot 4 中,你可以通过创建一个自动加载的脚本来实现单例类,用于作为公共的数据总线。现在,你可以在项目的任何地方通过 `GlobalData` 单例访问这些公共数据和函数。

exlink2012的专栏 1222

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

【Godot4.3】基于状态切换的游戏元素概论

一些游戏元素,其实是拥有多个状态的。比如一个宝箱,有打开和关闭两个状态。那么只需要设定两个状态的图片,就可以了。建筑物、生物、角色等等都可以用类似的结构存储多种状态,并进行切换。状态可以是静帧,也可以是一段循环帧动画。基于SpriteSheets或序列帧的帧动画搞的就是基于图片的状态划分这一套。但是你需要用这样的东西去创建多个状态的动画,再在脚本中进行切换。通过从结构上就设计和管理游戏元素的多状态。我们可以更少的依赖等对游戏元素状态的划分,我们可以更直观和简单的切换元素的状态和外形。

巽的博客 815

使用DrissionPage和自动化技术实现得物鞋子信息爬取

本文介绍了一个基于DrissionPage技术的得物鞋子信息采集系统,能自动化采集商品图片、价格等数据并保存为Excel。系统采用浏览器模拟技术处理动态加载内容,通过XPath定位元素,实现智能交互和完整数据采集。关键技术包括:图片URL提取与下载、Excel数据集成与图片嵌入、文件名安全处理等。项目适用于市场分析和学术研究,强调必须遵守法律法规和平台规则,仅用于非商业用途。与API爬虫相比,浏览器自动化能更好处理现代Web应用,但需注意知识产权保护。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1665

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Godot4.3类星露谷游戏开发之【简易库存】(UI部分)
下一篇: 【笔记】Godot 十二种打印函数
ForBigData
博客等级 码龄7年 221粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ForBigData

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

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

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

打赏作者

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

抵扣说明:

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

余额充值