Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Code Optimizations

Name: Anonymous 2011-11-12 18:05

Hey there /prog/, let's talk about optimization or different things we can do to speed up our applications.

Currently I'm writing a game, and it usually takes up around ~50% of my CPU usage on the bigger maps.  I have a vector that contains all of my blocks, enemies, and other things that should be drawn on the screen.

In my draw thread, it could look like this:
player.draw();
for (int bi = 0; bi < blocks.size(); bi++)
{
    if (InCameraView(blocks[bi]))
    {
        draw(blocks[bi]);
    }
}

In my update thread, it looks like:
player.update();
for (int bi = 0; bi < blocks.size(); bi++)
{
    if (InCameraView(blocks[bi]))
    {
        player.TouchGround(blocks[bi]);
        for (int ei = 0; ei < enemies.size(); ei++)
        {
            enemies.update();
            enemies[ei].TouchGround(blocks[bi]);
        }
    }
}

Obviously only an example, and I typically have lots of more objects that are currently being drawn on the screen.  I also understand that it's usually very bad to have nested for loops, but I'm not exactly sure how else I could handle this.

Also, for rendering I have a lot of "switch" blocks to determine what I should render or update.

switch (CurrentWorld)
{
    case Worlds::MainMenu:
        worldMainMenu.draw();
    break
    case Worlds::Level:
        worldLevel.draw();
    break;
}

Also, for updating thread:
while (true)
{
    while (resetTime >= gameTime)
    {
        resetTime -= gameTime;
    switch (CurrentWorld)
    {
            case Worlds::MainMenu:
                mainMenu.update();
            break;
        case Worlds::Level:
            worldLevel.update();
        break;
    }
    }
}

How do you guys like to optimize your applications to run better and use less processing power?

Name: Anonymous 2011-11-12 19:35

>>3
I'd like to speed up the InCameraView method.  Currently the Camera View is an invisible rectangle, and I check if objects x and y coordinates are inside.  If so, return true, else return false.

>>4
I was actually wanting to do something like this, but I wasn't actually sure how to set it up.  It seems that I would still need to loop through the vector to see which objects are in range, for example:

for (oi = 0; oi < objects.size(); oi++)
{
    if (InCameraView(objects[oi]))
    {
        objects_drawable.push_back(objects[oi]);
    }
    else
    {
        objects_drawable.erase(objects_drawable.begin() + oi);
    }
}


So obviously I'd still be looping through the vector, which would be consuming my CPU!

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List