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


提示

本文的设想性质比较大,只是探讨一种设计思路。完全理论阶段,不可行就当是闹了个笑话O(∩_∩)O哈哈~但很符合我瞎搞的气质。


概述

一些游戏元素,其实是拥有多个状态的。比如一个宝箱,有打开和关闭两个状态。那么只需要设定两个状态的图片,就可以了。建筑物、生物、角色等等都可以用类似的结构存储多种状态,并进行切换。

状态可以是静帧,也可以是一段循环帧动画。

基于SpriteSheets或序列帧的帧动画搞的就是基于图片的状态划分这一套。但是你需要用AnimationPlayer这样的东西去创建多个状态的动画,再在脚本中进行切换。

通过从结构上就设计和管理游戏元素的多状态。我们可以更少的依赖AnimationPlayer等对游戏元素状态的划分,我们可以更直观和简单的切换元素的状态和外形。而且同样可以是基于多张图片的,也可以是基于精灵表的。这对新手使用更是没什么难度,而且很直观。

类型体系设计

在这里插入图片描述

简单状态用图片,复杂状态用图片序列。

设计具体的元素

  • StateBasedGameElement只是一个抽象的基于状态的游戏元素(以下简称SBGE),你可以基于其扩展具体的元素类型,比如建筑物、植物、动物、角色等等
# 创建一个具体的盒子元素
class Box extends StateBasedGameElement://...pass
  • 或者可以基于一个Node2D来专门创建SBGE。

状态切换的实现

对状态和序列帧的绘制使用CanvasItem绘图函数实现。

状态分析与面向游戏元素状态设计

通过从一开始就强调游戏元素的“状态”,游戏元素的设计就变成了状态分析的过程,绘制素材有了凭据。

而使用StateBasedGameElement的过程就是动态创建和管理游戏元素的状态,赋值各个状态的静帧或序列帧,然后在脚本中切换状态。

游戏元素的状态在节点内部切换,外部代码不再需要存储。所有状态并列在一个列表中,只通过索引进行切换。

在这里插入图片描述

将方向状态单独列出

可以划分为两方向、四方向、八方向、十六方向等。每个方向下又可以对应其他状态。所以状态从一个一维列表,变成了二维表。

还可以设定一个参数表示游戏元素目前的朝向,比如angle,通过-360°360°范围的角度来定义方向,根据角度自动判定和切换对应朝向的图片。

在这里插入图片描述

总结

纯设想和理论状态,有待实践验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程多线程

1.线程和进程的区别? 进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间线程更轻量,线程上下文切换成本一般上要比进程上下文…

axure的下载,激活,汉化全过程,多图

1.前言 下载地址:https://pan.baidu.com/s/12xo1mJer2hmBK7QrYM5v-Q?pwd0107#list/path%2Fcsdn%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 源文章:https://blog.csdn.net/iwanttostudyc/article/details/123773796?ops_request_misc%257B%2522request%25…

STM32 单片机最小系统全解析

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统,包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要,由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面,采用 3.3V 直流电源供…

.Net网络通信组件 - TouchSocket

文章目录 .Net网络通信组件 - TouchSocket1、新建.Net8控制台项目2、Nuget安装TouchSocket组件3、编写服务端代码4、编写客户端代码5、编写Program代码6、运行效果7、日志组件(NLog)参考我的另一篇博客 .Net网络通信组件 - TouchSocket 1、新建.Net8控制…

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm: 首先,访问JetBrains官方网站(https://www.jetbrains.com/pycharm/)下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后,打开PyCharm。 创建新…

深度学习03-神经网络02-激活函数

可以使用这个进行跳转链接​​​​​​​http://playground.tensorflow.org/#activationrelu&batchSize11&datasetspiralDatasetreg-gauss&learningRate0.01ularizationRate0.1&noise0&networkShape7,5,4,3,2&seed0.54477&showTestDatafalse&d…

【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用

文章目录 什么是MVC?MVC眼花缭乱设计图MVP和MVC最经典的MVC的业务流程Unity MVC 框架示例1. 创建项目结构2. 实现模型3. 实现视图4. 实现控制器5. 使用示例 总结参考完结 什么是MVC? MVC自1982年被设计出来,至今都有着很大比重的使用率&…

HCIA--实验十八:配置全局DCHP

一、实验内容 1.需求/要求: 使用一台5700交换机和一台PC,实现全局DHCP的配置,并且自定义配置网关,配置DNS。 二、实验过程 1.拓扑图: 2.步骤: 1.SW1激活DHCP服务,创建vlan10 2.SW1给vlan10添加ip地址 …

Transformer模型-7- Decoder

概述 Decoder也是N6层堆叠的结构,每层被分3层: 两个注意力层和前馈网络层,同Encoder一样在主层后都加有Add&Norm,负责残差连接和归一化操作。 Encoder与Decoder有三大主要的不同: 第一层 Masked Multi-Head Attention: 采用…

Linux 动静态库

目录 一.静态库 1.理解静态库 a.什么是静态库? b.创建静态库的理论? 2.打包静态库 3.静态库的使用方法 a.头文件找不着 b.链接报错——库函数文件找不着 4.将静态库文件写到系统目录下 a.直接拷贝 b.建立软链接 二.动态库 1.什么是动态库&am…

通过标签实现有序:优化你的 FastAPI 生成的 TypeScript 客户端

在软件开发的世界里,API 客户端代码的质量直接影响着应用程序的性能和可维护性。随着项目规模的扩大,自动化生成的代码往往变得臃肿且难以管理。但幸运的是,通过一系列的优化策略,我们可以显著提升这些代码的优雅与效能。在本文中…

C#如何把写好的类编译成dll文件

1 新建一个类库项目 2 直接改写这个Class1.cs文件 3 记得要添加Windows.Forms引用 4 我直接把在别的项目中做好的cs文件搞到这里来,连文件名也改了(FilesDirectory.cs),这里using System.Windows.Forms不会报错,因为前…

用Qt 对接‌百度AI平台

很多同学想利用几大模型AI弄点东西,但又不知道如何去介入??最近帮同学弄点东西,刚好要接入到AI平台,就顺便研究了一下,并记录下来。 首先我们选择的 AI模型是百度的,然后注册,申请密…

8. 尝试微调LLM大型语言模型,让它会写唐诗

这篇文章与03. 进阶指南:自定义 Prompt 提升大模型解题能力一样,本质上是专注于“用”而非“写”,你可以像之前一样,对整体的流程有了一个了解,尝试调整超参数部分来查看对微调的影响。 这里同样是生成式人工智能导论&…

13年计算机考研408-数据结构

解析: 这个降序链表不影响时间复杂度,因为是链表,所以你想要升序就使用头插法,你想要降序就使用尾插法。 然后我们来分析一下最坏的情况是什么样的。 因为m和n都是两个有序的升序序列。 如果刚好m的最大值小于n的最小值&#xff0…

消息中间件---Kafka

一、什么是Kafka? Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统; 流处理事什么呢? 流处理就是数据处理工作流,本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…

10年408考研真题-数据结构

23.[2010统考真题]若元素 a,b,c,d,e,f 依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退栈操作,不可能得到的出栈序列是(D)。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 解析: 直接看D选项&#xff0…

Python | Leetcode Python题解之第420题强密码检验器

题目: 题解: class Solution:def strongPasswordChecker(self, password: str) -> int:n len(password)has_lower has_upper has_digit Falsefor ch in password:if ch.islower():has_lower Trueelif ch.isupper():has_upper Trueelif ch.isdi…

微服务保护之熔断降级

在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。为了防止这种情况发生,常用的一些…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据,检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…