gpt4 book ai didi

c++ - 帮助优化代码

转载 作者:行者123 更新时间:2023-11-28 01:08:53 25 4
gpt4 key购买 nike

我已经为我的 2d 应用程序编写了一个小粒子系统。这是下雨代码:

// HPP -----------------------------------
struct Data
{
float x, y, x_speed, y_speed;
int timeout;
Data();
};
std::vector<Data> mData;
bool mFirstTime;
void processDrops(float windPower, int i);

// CPP -----------------------------------
Data::Data()
: x(rand()%ScreenResolutionX), y(0)
, x_speed(0), y_speed(0), timeout(rand()%130)
{ }

void Rain::processDrops(float windPower, int i)
{
int posX = rand() % mWindowWidth;

mData[i].x = posX;

mData[i].x_speed = WindPower*0.1; // WindPower is float
mData[i].y_speed = Gravity*0.1; // Gravity is 9.8 * 19.2

// If that is first time, process drops randomly with window height
if (mFirstTime)
{
mData[i].timeout = 0;
mData[i].y = rand() % mWindowHeight;
}
else
{
mData[i].timeout = rand() % 130;
mData[i].y = 0;
}
}

void update(float windPower, float elapsed)
{
// If this is first time - create array with new Data structure objects
if (mFirstTime)
{
for (int i=0; i < mMaxObjects; ++i)
{
mData.push_back(Data());
processDrops(windPower, i);
}
mFirstTime = false;
}

for (int i=0; i < mMaxObjects; i++)
{
// Sleep until uptime > 0 (To make drops fall with randomly timeout)
if (mData[i].timeout > 0)
{
mData[i].timeout--;
}
else
{
// Find new x/y positions
mData[i].x += mData[i].x_speed * elapsed;
mData[i].y += mData[i].y_speed * elapsed;

// Find new speeds
mData[i].x_speed += windPower * elapsed;
mData[i].y_speed += Gravity * elapsed;

// Drawing here ...

// If drop has been falled out of the screen
if (mData[i].y > mWindowHeight) processDrops(windPower, i);
}
}
}

所以主要思想是:我有一些结构,其中包括下降位置、速度。我有一个函数用于处理 vector 数组中某个索引处的下降。现在,如果这是第一次运行,我将创建最大大小的数组并循环处理它。

但是这段代码比我所有的其他代码运行得慢。请帮助我优化它。

我尝试将所有 int 替换为 uint16_t 但我认为这无关紧要。

最佳答案

uint16_t 替换 int 应该不会有任何不同(它会占用更少的内存,但应该不会影响大多数机器上的运行时间)。

显示的代码看起来已经相当快了(它只做了它需要做的事情,没有特别的错误),我看不出你可以如何进一步优化它(最多你可以删除对 mFirstTime 的检查,但这应该没有什么区别。

如果它很慢,那是因为其他原因。也许你掉落的东西太多了,或者你的其余代码太慢了,以至于 update 每秒被调用的次数很少。
我建议您分析您的程序并查看大部分时间花在了哪些地方。


编辑:
可以加速这种算法的一件事,特别是如果您的系统没有 FPU(!这不是个人计算机的情况......),就是用整数替换您的浮点值。

只需将 elapsed 变量(以及您的常量,例如 0.1)乘以 1000,这样它们就代表毫秒,并且在任何地方都只使用整数。

关于c++ - 帮助优化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com