xna - 绘制许多不同批次时的 XNA 问题
问题描述
我有一个 4 个方向的 2D 游戏,我遇到了 FPS(或 GPU)问题,因为我必须绘制很多纹理。我已经阅读了很多关于优化性能的技术,但我不知道我能做什么了。
主要问题是在某些情况下我有大约 200 个生物,我必须在其中绘制他的身体(它是单个精灵),但还要在他的身体上绘制法术和其他动画。
所以,我认为那是它开始产生冲突的时候,因为我绘制每个生物的循环必须更改每个生物的纹理,即 body>animation1>animation2>animation3,这大约是 200(生物)次,速度为 60 fps。这将fps降低到大约40-50。有什么建议么?
这是它的外观:
解决方案
问题可能是 - 正如您已经建议的那样 - 不同纹理之间的不断切换。这比使用相同纹理绘制相同数量的精灵要慢得多。
要改变这一点,请考虑将所有纹理放入一个大纹理中。然后你总是画那个纹理。这显然看起来很错误,因此您还必须告诉 XNA 您要绘制纹理的哪个部分。为此,您可以使用可以传递给 SpriteBatch.Draw(...) 的 SourceRectangle 参数。这样,您始终可以渲染相同的纹理,但仍然可以在屏幕上显示不同的图像。
有关更多详细信息,另请参阅有关纹理图集的此答案。
推荐阅读
- android - 自定义模型 Kotlin 中的地图改造响应
- java - 为什么我的 spring 应用程序不断打开与云图集 mongoDB 的新连接?
- android - Flutter:如何将 DropdownButton 菜单图标对齐到最右边?
- apache-nifi - Nifi调用http如何在发布数据期间获取值并添加为Header
- angular - 带有 Asp.Net Core 3.1 后端的 Angular SPA 中的 OpenID Connect
- javascript - How can i enable Drag & Drop in Highcharts organization-charts?
- mysql - MySQL:将时间和日期转换为 unix 时间戳
- java - java类文件中的架构是什么意思?
- mongodb - 如何使用 typegoose 进行批量插入
- c++ - `(QWidget* pobj=0)` 和 `(QWidget* pwgt/*=0/)` 是干什么用的?