Witam, piszę grę RPG w SFMLu. Chcąc stworzyć lokację postanowiłem stworzyć obiekty sciany (kwadraty) Wall za pomocą fora, który przypisuje obiektowy współrzędne i następnie push_backiem "stwarza" go. Okazaju się że takim sposobem, tworząc około 40 obiektów klasy Wall program uruchamia się o około 2s dłużej. Przy większych ilościach czas uruchamiania potrafi sięgać do 7-8s. Znalazłem na internecie metodę vector<type>.reserve(int) dzieki ktorej program trochę przyśpieszył ( z 8s zrobiło się około 2s). Czy jest jakiś sposób by to obejść? Czy moja metoda jest wgl dobra czy powinienem ją zmienić, jak tak to na jaką? Pozdrawiam.
class Engine
{
public:
Engine(sf::RenderWindow &win);
//Create Player object
Player player;
//Create Bullet object
Bullet bullet;
//Create Bullet vector
vector<Bullet>::const_iterator iter;
vector<Bullet> BulletArray;
//Create Enemy object
Enemy enemy;
//Create Enemy vector
vector<Enemy>::const_iterator iter2;
vector<Enemy> EnemyArray;
//Create displayText object
displayText display_text;
//Create displayText vector
vector<displayText>::const_iterator iter3;
vector<displayText> displayTextArray;
//Create Coin object
Coin coin;
//Create Coin vector
vector<Coin>::const_iterator iter4;
vector<Coin> CoinArray;
//Create Wall object
Wall wall;
//Create Wall vector
vector<Wall>::const_iterator iter5;
vector<Wall> WallArray;
//Create Box object
Box box;
//Create Box vector
vector<Box>::const_iterator iterBox;
vector<Box> BoxArray;
};
void Engine::createRoom (int roomSize, int roomStartPositionX, int roomStartPositionY, int doorPosition, int numberEnemies)
{
wall.sprite.setTextureRect(sf::IntRect(0,50,50,50));
//create box
box.rect.setPosition(roomStartPositionX+80, roomStartPositionY+100);
BoxArray.push_back(box);
box.rect.setPosition(roomStartPositionX+160, roomStartPositionY+200);
BoxArray.push_back(box);
//create enemies
for(int i=0; i<numberEnemies; i++)
{
enemy.rect.setPosition(roomStartPositionX+roomSize*50/2+generateRandom(400),roomStartPositionY+roomSize*50/2+generateRandom(400));
EnemyArray.push_back(enemy);
}
//horizontal wall
int counterW = 0;
while(counterW<roomSize)
{
wall.rect.setPosition(50*counterW + roomStartPositionX, roomStartPositionY);
WallArray.push_back(wall);
counterW++;
}
//horizontal wall
counterW = 0;
while(counterW<roomSize)
{
wall.rect.setPosition(50*counterW + roomStartPositionX, 50*roomSize+roomStartPositionY);
WallArray.push_back(wall);
counterW++;
}
//vertical wall
counterW=0;
while(counterW<roomSize)
{
wall.rect.setPosition(roomStartPositionX, 50*counterW + roomStartPositionY);
WallArray.push_back(wall);
counterW++;
}
//vertical wall
counterW=0;
while(counterW<roomSize+1)
{
if(counterW!=doorPosition-1 && counterW!=doorPosition && counterW!=doorPosition+1)
{
wall.rect.setPosition(50*roomSize+roomStartPositionX, 50*counterW + roomStartPositionY);
WallArray.push_back(wall);
}
counterW++;
}
}