对象状态机和动画过多生成时卡顿.rar (261.5 KB)
AGM:1.0.22
大家好,最近在项目里遇到一个问题,想和大家交流下。
复现方法:
-
按 Z 键,生成带有简单动画和少量状态机的对象(简单对象)。
-
按 X 键,生成带有复杂动画和多状态机的对象(复杂动画和状态机对象)。
-
按 C 键,生成带有简单动画但多状态机的对象(简单动画和多状态机对象)。
测试运行:
对比测试发现,按 X 键生成的多动画且多状态机的对象,对游戏影响最大,生成时画面会卡顿甚至出现瞬移的情况;按 C 键生成的对象影响相对较小,卡顿不太明显。
总结:
动画数量和状态机数量对游戏流程的影响是相互关联的,当状态机和动画都较多时,对游戏流畅度的影响最大。
猜测:
动画方面,可能和图片切割的帧数量或者图片本身的大小有关;状态机生成时,可能因为一次性加载全部状态机,所以也会造成一定影响。
另外,项目中的大量状态机还有调用数据库、频繁改变变量和条件等操作,这些也会让生成对象时出现接近 1 秒的卡顿跳帧情况。
目前个人解决方案:
多制作一些新的对象,把主要对象拆分成多份来处理。
1 个赞
JP:
你好,最近在项目中遇到了问题,想和大家交流一下。
重现方法:
- 按下 Z 键,会生成具有简单动画和少量状态机的对象(简单对象)。
- 按下 X 键,会生成具有复杂动画和多个状态机的对象(复杂动画和状态机对象)。
- 按下 C 键,会生成具有简单动画但多个状态机的对象(简单动画和多个状态机对象)。
测试执行:
在对比测试中,由 X 键生成的具有多个动画和多个状态机的对象对游戏的影响最大,生成时会出现画面卡顿,严重时甚至会发生瞬移。由 C 键生成的对象影响相对较小,卡顿现象不明显。
总结:
动画数量和状态机数量会对游戏流程产生相关性影响。当状态机和动画数量都较多时,对游戏流畅度的影响最大。
推测:
就动画而言,可能与图像帧数(即图像切割数量)或图像本身的大小有关。在生成状态机时,由于需要一次性加载所有状态机,因此可能会产生一定影响。
此外,项目中的许多状态机还涉及数据库调用、频繁修改变量和条件等操作,这些操作在对象生成时也会导致约 1 秒的卡顿或帧率跳变。
当前个人解决方案:
创建更多新对象,并将主要对象拆分为多个部分进行处理。
1 个赞
EN:
大家好,我最近在项目中遇到了一个问题,想和大家讨论一下。
复现方法:
- 按 Z 键生成一个具有简单动画和少量状态机的对象(简单对象)。
- 按 X 键生成一个具有复杂动画和多个状态机的对象(复杂动画和状态机对象)。
- 按 C 键生成一个具有简单动画但多个状态机的对象(简单动画和多个状态机对象)。
测试运行:
通过对比测试发现,按 X 键生成的具有多个动画和多个状态机的对象对游戏影响最大。生成时屏幕会冻结,甚至出现瞬移现象。按 C 键生成的对象影响相对较小,卡顿不明显。
总结:
动画数量和状态机数量对游戏流畅度有相关性影响。当状态机和动画数量较多时,对游戏流畅度的影响最大。
推测:
关于动画,可能与图像切割的帧数或图像本身的大小有关。在生成状态机时,由于所有状态机同时加载,可能会造成一定影响。
此外,项目中还存在调用数据库以及在多个状态机中频繁修改变量和条件的操作,这些操作在生成对象时也会导致近 1 秒的卡顿和帧率跳变。
当前个人解决方案:
创建更多新对象,将主对象拆分为多个部分进行处理。
这是否与使用子弹设置时的性能损失有关?
当您创建典型的侧向卷轴射击游戏设置,即发射三连发子弹时,游戏会损失大量性能,甚至因帧率下降而卡顿。在 PGM 中,我做了同样的操作,并配合多个屏幕滚动,运行效果完美;但在 AGM 中,即使项目仅包含一个角色和一些测试图块,从开始射击的那一刻起,运行效果就非常糟糕。
我之前提交了一个项目,供您查看我所描述的情况。
我并未使用子弹发射节点——仅使用对象生成。在 AGM 中,目前已确认在生成对象时会出现卡顿,其根本原因已确定为以下几点:
- 动画数量过多(可能与精灵帧数或图像尺寸本身有关)
- 状态机数量过多(包括动作中连接条件和变量调用的过载)
希望官方团队能在未来的更新中优化此问题。
我尚未将子弹发射节点设置为无间隔地发射3发子弹。最小间隔通常为0.06秒(这适用于原始PGM)。另外,由于我的子弹对象的状态机数量较少且图像尺寸较小,其影响并不显著。
如果仔细观察,它几乎是一样的,你同时生成了多个具有其视觉脚本的对象。
1 个赞
在子弹生成方面也存在类似问题。然而,本文讨论的问题似乎指的是“即使仅生成一个对象”,所消耗的时间也会显著受到该对象的状态和动画数量的影响。此外,这种影响似乎过于显著。