【极简】Godot4.4 简易仓库A(附完整代码/素材包)

Godot 4 源码分析 - 文件读入编码处理 今天需要读入xml文件进行处理,结果读入一个带中文的文件时,出错了。当然程序还能运行,但编译器一直报错,而且XML解析也不正确。回头看了一下,原目标文件为GB2312编码。而Godot的FileAccess不支持别的编码。其实已经读入到w里,但String::parse_utf8出错。XML文本内容解析为图形效果。 阅读详情
AI摘要

本文基于【极简】Godot4.4快速搭建测试场景A,实现简易仓库,具备物品堆叠功能。详细介绍了复刻过程,包括节点结构、独立资源/脚本、附加脚本及其他设置,还提及运行测试、自查对照,并提供免费开源资产包下载方式。

无望其速成,无诱于势利。

一、展示

在 【极简】Godot4.4 快速搭建测试场景A(附完整代码/素材包)基础上,本文实现简易仓库,功能:物品堆叠。

请添加图片描述

二、复刻

(一)节点结构

1. inventory_ui.tscn

  • InventoryUI(CanvasLayer)
    • PanelContainer
      • GridContainer

2. slot_ui.tscn

  • SlotUI(VBoxContainer)
    • TextureRect
      • StackLabel(Label)
    • NameLabel(Label)

请添加图片描述

(二)独立资源/脚本

1. event_bus.gd(事件总线)

功能:集中定义信号

extends Node

@warning_ignore("unused_signal")
signal inventory_item_added(item: InventoryItem)	# 添加物品

var inventory_items: Array[Resource]	# 存储物品数据的列表

func _ready() -> void:
	inventory_items.resize(6)

项目设置->全局->路径(该脚本的路径)->添加,使得该脚本被设置为全局脚本。

在这里插入图片描述

2. inventory_item.gd(物品信息模板)

功能:可复用的物品信息的模板

class_name InventoryItem
extends Resource

@export var texture: Texture
@export var name: String
@export var max_stack: int = 99
var stack: int = 0

3. inventory_item.tres(物体信息实体)

创建resource文件,并命名为 inventory_item.tres;

在这里插入图片描述
在这里插入图片描述
点击打开后,在检查中把inventory_item.gd 附加到 inventory_item.tres 上;

在这里插入图片描述
可以发现检查器中多出来InventoryItem,里面正是在 inventory_item.gd 中的各种数值。

(三)附加脚本

1. Egg.gd

附加到egg.tscn中的Egg节点(Sprite2D):

extends Sprite2D
## 可收集的蛋

@export var item: InventoryItem
# 蛋的默认数量
@export var stack : int = 1

# 从PickUpComponent连接的信号
func _on_pick_up_component_body_entered(body: Node2D) -> void:
	if body is CharacterBody2D:	
		item.stack = stack
		EventBus.inventory_item_added.emit(item)	# 蛋被收集后发送广播信号 
		queue_free()	# 删除蛋 

2. inventory_ui.gd

附加到 inventory_ui.tscn中的InventoryUI节点(CanvasLayer):

class_name InventoryUI
extends CanvasLayer
## 库存面板,用于更新物品槽,处理事件

const SLOT_UI = preload("res://scenes/UI/slot_ui.tscn")

@export var sizes: int = 6					# 物品槽的总数
@export var columns: int = 3				# 物品槽的列数 

@onready var grid_container: GridContainer = $PanelContainer/GridContainer


func _ready() -> void:
	# 在库存面板中初始化所有的物品槽
	grid_container.columns = columns
	for i in sizes:
		var slot = SLOT_UI.instantiate()
		slot.slot_index = i
		grid_container.add_child(slot)
	
	# 连接添加物品信号
	EventBus.inventory_item_added.connect(_on_egg_inventory_item_added)


# 当收到egg节点发送的信号inventory_item_added后,更新库存面板
# 命名规范:_on_[发送节点名]_[发送信号名]
func _on_egg_inventory_item_added(item: InventoryItem) ->void:
	# TODO: 先堆叠同名物品,若有剩余物品,再寻空物品槽加入
	var remain: int = item.stack
	var index: int = -1

	# 寻找同名物品,若存在且有空位进行堆叠
	for i in EventBus.inventory_items.size():
		if EventBus.inventory_items[i] != null and EventBus.inventory_items[i].name == item.name and remain > 0:
			var available: int = EventBus.inventory_items[i].max_stack - EventBus.inventory_items[i].stack
			index = i
			EventBus.inventory_items[i].stack += min(remain, available)	# 堆叠物品  
			
			# 更新原本的slot标签
			update_slot_stack_label(EventBus.inventory_items[i], index)
			remain = remain - available		#剩余未堆叠物品
	
	
	# 将未堆叠的剩余物品放进空物品槽(如果有的话)		
	while remain > 0 and EventBus.inventory_items.has(null):
		# 放进空物品槽
		var add_mount:int = min(remain, item.max_stack)
		var new_item:InventoryItem = item.duplicate(true)	#创建一个新的item
		new_item.stack = add_mount
		var first_empty_index: int = EventBus.inventory_items.find(null)
		EventBus.inventory_items[first_empty_index] = new_item# 保存进列表
		update_first_empty_slot(new_item)	# 选择第一个空槽,更新物品信息
		
		# 剩余物品若大于零,继续循环找空位放置 
		remain = remain - add_mount
		
	
# 放进从左往右,从上到下数第一个空槽
func update_first_empty_slot(item: InventoryItem) ->void:
	# 过滤出当前所有的空槽
	var empty_slots: Array = grid_container.get_children().filter(func(slot): return slot.is_empty)
	#选择空槽列表中的第一个
	var first_empty_slot :SlotUI = empty_slots.front()
	#创建一个空格
	first_empty_slot.update_slot(item)


# 跟新物品槽数量标签
func update_slot_stack_label(item: InventoryItem, index: int) ->void:
	grid_container.get_child(index).stack_label.text = str(item.stack)

如果 const SLOT_UI = preload(“res://slot_ui.tscn”) 报错,说明路径不对,需改成文件系统中自定义的slot_ui.tscn所在的路径。

3. slot_ui.gd

附加到 slot_ui.tscn 中的 SlotUI 节点(VBoxContainer):

class_name SlotUI
extends VBoxContainer
## 物品槽,实现拖放

@export var inventory_item: InventoryItem
var is_empty: bool = true  #物品槽默认为空
var slot_index: int = -1  #物品槽索引默认为-1

@onready var texture_rect: TextureRect = $TextureRect
@onready var stack_label: Label = $TextureRect/StackLabel
@onready var name_label: Label = $NameLabel


# 初始化物品槽
func _ready() -> void:
	if inventory_item.texture != null:
		texture_rect.texture = inventory_item.texture
	if inventory_item.name != null:	
		name_label.text = inventory_item.name
	
	
	
# 当收到InventoryUI节点发送的信号后,更新物品槽
# 命名规范:_on_[发送节点名]_[发送信号名]
func update_slot(item: InventoryItem) ->void:
	texture_rect.texture = item.texture
	stack_label.text = str(item.stack)
	name_label.text = item.name	
	is_empty = false

4. slot_ui.tscn

选中场景中的SlotUI节点,在检查器中加载物品信息模板 inventory_item.tres;

###

5. egg.tscn

首先我们找到 inventory_item.tres 文件,将它复制为 egg_inventory_item.tres;

在这里插入图片描述
选中 egg.tscn 场景中的 Egg 节点,在检查器中加载物品信息模板 egg_inventory_item.tres;
并在Texture、Name中分别填上蛋的图片和名字信息;

在这里插入图片描述

(四)其他设置

1. inventory_ui.tscn

选中 inventory_ui.tscn 场景下的 PanelContainer 节点,在检查器Layout->Custom Minimum Size设置x = 90.0px, y = 76.0px,然后找到锚点预设,将当前节点设置为居中;

在这里插入图片描述

2. slot_ui.tscn

选中 slot_ui.tscn 场景下的 TextureRect 节点,在检查器Layout->Custom Minimum Size设置x = 30.0px, y = 30.0px;

在这里插入图片描述
选中 slot_ui.tscn 场景下的 StackLabel 节点,在检查器中设置为右下方向;

在这里插入图片描述
选中 slot_ui.tscn 场景下的 StackLabel 节点在检查器Control->Transform:Size.x= 30.0px,Size.y = 30.0px;

在这里插入图片描述
选中 slot_ui.tscn 场景下的 StackLabel 节点在检查器Control->Theme中新建Theme,然后将默认字体大小 Default Font Size 设置为10px;
在Theme Overrides下勾选字体阴影颜色 Font Shadow Color 和字体轮廓颜色 Font Outline Color;

在这里插入图片描述
同样,选中slot_ui.tscn 场景下的 NameLabel 节点在检查器设置如下图所示;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 显示画面太小

在项目设置->显示->窗口:缩放设置为4.0;

在这里插入图片描述

4. 画面模糊

在项目设置->渲染->纹理->画布纹理:默认纹理过滤设置为Nearest;

在这里插入图片描述

三、运行测试

搭建测试场景如下:

在这里插入图片描述
请添加图片描述

四、自查对照

问题现象关键检查点解决方案
The InputMap action “down” doesn’t exist. Did you mean “ui_down”?检查输入映射是否存在left,right,up,down动作项目设置→输入映射→添加left,right,up,down并绑定键盘左、右键
画面太小检查项目设置->常规->显示->拉伸->缩放调整缩放大小
角色像素纹理不清晰检查项目设置->渲染->纹理->画布纹理->默认纹理过滤在默认纹理过滤设置为Nearest
Invalid assignment of property or key ‘stack’ with value of type ‘int’ on a base object of type ‘Nil’.egg.tscn场景或者是slot_ui.tscn场景未加载egg_inventory_item.tres或inventory_item.tres文件打开场景在检查器中加载对应文件
库存面板在左上角检查inventory_ui.tscn场景中的PanelContainer是否预设未居中选中inventory_ui.tscn场景中的PanelContainer节点,在检查器或者是2D区预设该节点为居中

(欢迎评论区讨论!)

五、免费开源资产包

某开源网站精灵图资源包链接: 点击此处

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

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

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

Godot 4 源码分析 - 初探 准备研究GoDot 4源码。 阅读详情

相关推荐

Godot 4 源码分析 - 增加管道通信

学习研究Godot 4,很爽,虽然很庞杂,但相对于自己的水平来说,很强大,尤其是vulkan这块直接打包可用,省得自己从头琢磨。一点一点地消化、优化与完善,最终才能成为自己的。这段时间就在Godot的基础上,增加管道通信,实现Godot与本机已有程序进行通信,以备后续的无缝集成整合。其实,Godot支持各种网络通信,支持UDP、TCP等。为什么非要实现管道通信,本质上还是想看看改造效果。最终目标是实现Godot软件与自己的DrGraph软件的管道通信。

drgraph的博客 1819

4.Godot图片素材的获取和编辑

游戏开发中经常遇到图片素材的需求。

ChoSeitaku的博客 4310

Godot编辑器极简主题定制:从视觉降噪到布局优化的全流程实践

在游戏开发与引擎学习中,界面主题定制是提升开发效率与专注度的重要工程实践。其核心原理在于通过系统性的视觉降噪与布局重构,优化人机交互的信息流,减少认知负荷。从技术价值看,一个精心设计的主题不仅能降低新手学习门槛,更能为复杂项目(如AI集成、大型资源管理)提供纯净的创作空间。具体到应用场景,开发者常面临编辑器信息过载、色彩干扰与布局混乱等问题,这正凸显了界面优化的重要性。本文以Godot编辑器为例,深入探讨如何通过修改主题资源、调整配色方案与编写布局脚本,实现从“功能可见性”到“需求可见性”的转变,其中涉及g

weixin_34310369的博客 472

godot引擎c++源码深度解析系列二

就这样就实现了文本框,输入框和按钮的实现,以及对应的事件,后面还有很多的功能,都需要慢慢的研究。这个里面需要研究以下c++的控件页面的开发和熟悉,毕竟好久没有使用c++了,先来看以下代码吧。记录每次研究源码的突破,今天已经将打字练习的功能完成了一个基本模型,先来看下运行效果。下一步开始研究加工车间的面板,虽有难度,但也有挑战。

温情亿度网络科技 1149

Godot4.4项目Git仓库管理模板:新手开箱即用的最佳实践

在游戏开发与软件工程中,版本控制系统是管理项目代码与资源、实现团队协作的核心工具。Git作为分布式版本控制系统的代表,通过跟踪文件变更、支持分支管理,为项目迭代提供了可靠保障。其技术价值在于确保代码历史可追溯、降低协作冲突风险,广泛应用于开源项目、独立游戏开发等场景。对于使用Godot引擎的开发者而言,合理的项目结构与.gitignore配置是高效利用Git进行项目管理的基础。本文聚焦于Godot4.4项目,提供一个**开箱即用**的仓库模板,详细解析了针对Godot引擎特性的目录设计、资源管理策略以及.g

weixin_33816946的博客 323

深入Godot文档仓库:从源码构建到定制化部署的完整指南

开源游戏引擎的文档系统是开发者生态的重要基石,它不仅提供API参考和教程,更是社区协作的知识库。基于Sphinx等文档生成框架,这类系统通过解析结构化源码注释(如XML格式的类定义)自动生成HTML页面,实现了文档与代码的同步更新。其技术价值在于为开发者提供准确、可离线访问、可搜索的权威参考资料,并能通过版本控制进行协作维护。在Godot引擎生态中,文档仓库(godot-docs)采用reStructuredText格式编写内容,结合自定义Sphinx扩展处理引擎特有的类、方法和信号引用。通过搭建本地Pyt

weixin_30607659的博客 358

【极简】Godot4.4 简易仓库B(附完整代码/素材包)

【极简】Godot:简易仓库,在前文基础上实现拖拽放置、拖拽分割功能。

ForBigData的博客 943

Godot Minimal Theme:从社区主题到官方默认的极简UI设计演进

在软件开发领域,用户界面(UI)设计直接影响开发者的工作效率与体验。优秀的UI设计遵循‘少即是多’的原则,通过降低认知负荷、建立清晰的信息层级和保持一致性,来提升工具的可用性。这种设计理念在集成开发环境(IDE)和游戏引擎中尤为重要,它能减少视觉疲劳,帮助开发者更快进入‘心流’状态,从而专注于核心创作。Godot Minimal Theme正是这一理念的杰出实践,它最初作为社区项目,通过极简的视觉设计、统一的配色方案和优化的字体排版,显著改善了Godot编辑器的使用体验。其成功不仅体现在社区的口碑传播上,更

weixin_30682415的博客 458

【极简】Godot 4.4 简易仓库C(附完整代码/素材包)

【极简】Godot 简易仓库,在前文基础上实现拖拽丢弃物品功能,包括鼠标左键丢弃与Ctrl+鼠标左键丢弃

ForBigData的博客 913

别只盯着3A!用Godot 4做独立游戏或移动端原型,这些功能比Unity/UE更香

本文探讨了Godot 4在独立游戏和移动端原型开发中的独特优势,对比Unity和UE的轻量级设计。Godot 4凭借极简的项目结构、原生移动端编辑能力和零摩擦的迭代流程,成为开发者的秘密武器。文章详细介绍了其安装简便、文件系统透明、移动端工作流高效等特点,帮助开发者快速上手并提升效率。

weixin_30697239的博客 496

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

如何打造清爽高效的Godot开发环境?极简编辑器主题Minimal Theme全攻略

在游戏开发的世界里,一个舒适高效的编辑器界面能让创作过程事半功倍!今天我们要分享的**Godot Minimal Theme**,正是为追求简洁美学与实用功能的开发者打造的终极解决方案。这款轻量级主题通过精心设计的色彩搭配与界面优化,让你的Godot引擎焕然一新,从此告别杂乱界面,专注创意本身! ## ???? 为什么选择Minimal Godot Theme?三大核心优势 ### ✅ 极简设计,...

gitblog_00865的博客 646

Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解

在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中

weixin_42524171的博客 493

如何为Godot Engine构建LuaScript模块?完整编译指南

LuaScript是一个为Godot Engine 4.x提供Lua 5.4语言支持的模块,它允许开发者在Godot中使用Lua编写游戏逻辑,同时享受Godot强大的游戏开发功能。本文将详细介绍如何编译和安装LuaScript模块,让你快速上手这一强大工具。 ## 📋 准备工作 在开始编译LuaScript之前,你需要确保系统中已经安装了以下工具和环境: - Godot Engine源代码

gitblog_00009的博客 748

macOS向日葵闪退终极修复:权限设置与后台运行全解析

本文详细解析了macOS上向日葵远程控制软件闪退问题的根源与解决方案,重点介绍了权限设置与后台运行的优化方法。通过配置屏幕录制、辅助功能等关键权限,以及优化后台进程管理,有效解决闪退问题,提升远程控制软件的稳定性与使用体验。

fern8的博客 1756

最新 抖音 X-Gorgon 0408 和8408 设备注册协议

抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg方法,所以导致现在最新版抖音app的xg算法有0408和8408两种。两种都是最新版,因为我发现当我使用oppo手机安装最新版抖音抓包的xg是8408,而当我用小米或者华为安装最新版抖音,抓包以后发现xg是0408。抖音IOS XG84 设备注册激活协议代码片段。...

Q44804487的博客 1万+

告别视觉疲劳:5分钟打造专属Godot极简开发环境

还在为Godot编辑器那单调的界面而烦恼吗?每天面对杂乱无章的工具栏和刺眼的配色方案,是否让你在创作时难以保持专注?别担心,今天我要为你介绍一个能够彻底改变开发体验的神奇工具——Godot Minimal Theme。 ## 你的开发痛点,它都懂 长时间编码导致的眼睛疲劳、在复杂项目中找不到关键工具、界面元素过多分散注意力……这些都是开发者们经常遇到的困扰。Godot Minimal Them

gitblog_00015的博客 296

VLA、世界模型与端到端在智驾中的本质关系与工程落地

世界模型并非3D重建,而是对环境状态转移函数的可微分建模;VLA不是视觉+语言+动作的简单拼接,核心在于跨模态语义对齐。二者共同支撑具身智能系统实现从感知到行动的闭环推演,其技术价值体现在长尾场景泛化能力提升与决策延迟降低。在自动驾驶领域,真实量产方案均采用VLA架构作为多模态感知基础,嵌入轻量级世界模型以支持反事实轨迹推演,并通过WA硬件封装保障实时性,最终由端到端控制层完成像素到扭矩的语义贯通。这种混合架构已成L2+/L3智驾系统的工程共识。

weixin_34163553的博客 365

从安装到精通:Godot Orchestrator完整配置指南(兼容Godot 4.4-4.7版本)

Godot Orchestrator是一款专为Godot Engine(4.x版本)打造的视觉脚本插件,它提供了直观的节点式编程界面,帮助开发者无需编写代码即可创建复杂的游戏逻辑。本指南将从安装到高级配置,全面介绍如何在Godot 4.4至4.7版本中使用Orchestrator提升开发效率。 ## 📋 准备工作:环境要求与前置条件 在开始配置前,请确保您的开发环境满足以下条件: - God

gitblog_01106的博客 892

YOLO11改进 | 卷积模块 | 轻量化GSConv替换普通的conv

yolo11,GSConv,卷积模块

kay_545 3955

ARM系统控制和管理接口System Control and Management Interface

本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。 本文档描述了系统控制和管理接口(SCMI),它是一组操作系统无关的软件接口,用于系统管理。

AI-安全-功耗 1912

Godot教程仓库指南

Godot教程仓库指南 概览 本仓库由Mina Pêcheux维护,旨在提供一系列以视频和文字形式发布的Godot引擎结合C#语言的教程资源。这些教程覆盖了从基础到进阶的多个方面,适用于不同水平的Godot开发者,特别是那些希望在Godot 4中使用C#进行游戏开发的学习者。 1. 项目目录结构及介绍 仓库的组织结构清晰地反映了教程的序列,便于学习者跟随每个步骤进行实践。以下是主要的目录和它们...

gitblog_00023的博客 534

KylinOS 离线安装 MinIO【图文步骤】

在国产操作系统 KylinOS 中安装 MinIO,详细步骤...

甘蓝的专栏 1534

终极指南:用Godot 4.5打造完整回合制RPG游戏

还在为如何开始你的第一个RPG游戏开发而烦恼吗?想学习如何构建一个完整的回合制战斗系统,却不知道从何入手?Godot Open RPG项目正是为你准备的完美解决方案!这个基于Godot 4.5引擎的开源RPG项目,为你展示了从零开始构建一个完整角色扮演游戏的所有核心要素。 ## 🎮 为什么你需要这个开源RPG项目? 想象一下:你有一个绝妙的游戏创意,但面对复杂的战斗系统、对话机制和地图设计时

gitblog_00968的博客 845

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

打开就能跑的 Godot 2D/3D 完整示例:godot-demo-projects 演示项目合集手把手

godot-demo-projects 是一套 Godot 引擎的演示项目合集,收录的每个示例都是开箱即跑的完整项目。本指南演示如何在编辑器里找到、打开并修改这些示例游戏,并教你定位其中最影响运行效果的几处配置。 ## 🔍 第一次打开,你能跑起来什么 仓库里每个带 `project.godot` 文件的文件夹,都是一个独立的 Godot 项目:场景、脚本、贴图、音频齐全,加载进编辑器就能运行

gitblog_00461的博客 313

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

3 分钟看懂 godot-cpp:Godot 4 用 C++ 写高性能游戏的完整指南

游戏逻辑写到某个点,帧率开始抖:AI 寻路、物理结算、大规模数据处理,全卡在那一段 GDScript 上。换成 C++ 是本能反应——但一想到要给整个 Godot 引擎加个模块、重新编译几小时的引擎二进制,多数人又缩了回去。 而这正是 **godot-cpp** 存在的原因:它是 Godot 引擎官方的 **C++ 绑定库**,让你把吃性能的那部分逻辑用 C++ 重写,**不用动引擎一行代码**

gitblog_00105的博客 953

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 【极简】Godot4.4 快速搭建测试场景A(附完整代码/素材包)
下一篇: 【极简】Godot4.4 简易仓库B(附完整代码/素材包)
ForBigData
博客等级 码龄7年 221粉丝 41原创
评论
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值