如何解决游戏性能不佳
游戏优化是游戏开发的重要概念。良好的优化将使游戏运行更快,使其更流畅。
如果您的游戏运行缓慢,建议查看以下常见消耗部分:
- 是否有很多粒子发射器?粒子的渲染可能很耗费资源,考虑减少使用的数量。
- 事件中是否有很多逻辑?启动分析器并运行游戏。然后查看结果。是否有需要花费大量时间的事件组?如果是,请考虑检查此组内的事件,看看是否有成本高昂的部分可以重新排列或更改。
- 可能这些事件被应用于大量对象。考虑通过将事件分组为一个事件的子事件,并具有排除不需要受到影响的对象的条件(即,屏幕外的NPC或距离玩家范围之外的对象)来优化对象数量。
- 运行分析器后,请检查是否在渲染步骤中花费了很多时间。如果是,请可能是因为屏幕上有太多对象或需要复杂渲染。考虑减少对象数量。如果有很多带有大型背景的图层,也许您可以减少重叠。多次渲染,特别是对于被其他对象遮挡的对象,可能很耗费资源。考虑隐藏或销毁被其他对象遮挡的对象。
- 是否有很多带有物理引擎或平台行为的对象?如果是,请考虑为屏幕外的对象禁用这些行为,或销毁远离玩家的对象。
- 是否在图层上使用效果?如果是,请注意太多效果会减慢游戏渲染速度,特别是在手机上。
FPS计数器
尝试将FPS(每秒帧数)计数器添加到游戏中。这将允许您衡量优化是否提高了游戏的性能。您可以通过修改文本对象并将其设置为FPS:"+ ToString(ceil(1/TimeDelta())),或:
计算粒子
要计算游戏中使用的粒子数量,请创建包含所有粒子发射器的对象组。然后使用ForEach事件来计算每个粒子发射器实例产生的粒子数量,并将该数量保存在一个变量中。然后使用文本对象将该数字显示在屏幕上。
优化事件
GDevelop 5为您提供了在事件中的完全自由。尽管这很棒,但如果不习惯编写优化的事件,可能会非常昂贵,因为处理器在运行游戏时可能会超负荷。这可能导致游戏出现卡顿。
重要的是要了解什么是事件,以及所有事件都是_每帧仅调用一次_,并且_按照编写的顺序执行_。
使用“Trigger Once”来提高性能
Trigger once条件使同一事件中位于其之前的条件仅在满足条件时触发一次。
例如,如果您希望每次点击时创建一个对象,则应_不要_这样做:
禁用未使用的行为
行为会消耗性能,特别是_寻路(Pathfinding)_和_物理引擎 2.0_行为。在不需要时记得禁用它们。### 提示
不要忘记触发一次,以确保行为在从不可见状态切换到可见状态或反之时才启用或禁用
删除未使用的对象
让我们以以下情况作为例子:我有一把枪,当我按下开火键时创建一个子弹对象实例。这颗子弹朝一个方向施加力。如果玩家射出很多子弹,它们在场景中的数量将增加,每个子弹需要计算施加到它们上的力量。如果不删除旧的子弹对象,它们将累积并导致性能消耗越来越大,在玩一段时间后会出现卡顿。最好的解决方案是删除屏幕之外的子弹。
行为 “在屏幕外销毁” 就是这样做的。将其附加到一个对象上,所有超出屏幕的子弹都将被删除。
引擎中已有的优化注意
GDevelop 已经内置了优化,比如 culling,即自动隐藏屏幕之外的对象。这样,渲染的对象实例更少,渲染速度更快。
这并不影响创建游戏的人,因为这是在后台处理的。对于每个人来说都是完全透明的。例如,当精灵不在屏幕上时,所有动画都会暂停。
注意
隐藏或禁用不需要的内容仍然很重要。这是优化的关键。