Im creating a gui lib for my game with sfml:
So, i have created the button and textbox, and if fully perfect.
So, im creating now the window class, that will create a window on screen.
But when i will draw the parts of the window, the problem occurr, too many memory is used and the game is so slowly...too slowly...
But, if i comment the lines that draw the sprite(sprite->draw), the game run normals, with good performance, with no problem.
The code is:
#include "Janela.h"
/**
* Construtor
*/
gui::Janela::Janela(unsigned int posX, unsigned int posY, std::string titulo, float largura, float altura, bool modal, bool movel, std::string imagem)
{
//inicializa atributos
this->posX = posX;
this->posY = posY;
this->titulo = titulo;
this->largura = largura;
this->altura = altura;
this->modal = modal;
this->movel = movel;
if (!this->img.LoadFromFile(imagem))
{
//não foi possível carregar a imagem
}
//inicializa SPRITEs
this->sprtSuperiorEsquerdo.SetImage(this->img);
this->sprtSuperiorMeio.SetImage(this->img);
this->sprtSuperiorDireito.SetImage(this->img);
this->sprtEsquerdo.SetImage(this->img);
this->sprtDireito.SetImage(this->img);
this->sprtFundo.SetImage(this->img);
this->sprtInferiorEsquerdo.SetImage(this->img);
this->sprtInferiorMeio.SetImage(this->img);
this->sprtInferiorDireito.SetImage(this->img);
//inicializa RECTs
this->rectSuperiorEsquerdo = sf::IntRect(0,0,11,24);
this->rectSuperiorMeio = sf::IntRect(58,0,81,24);
this->rectSuperiorDireito = sf::IntRect(224,0,235,24);
this->rectEsquerdo = sf::IntRect(0,79,11,85);
this->rectDireito = sf::IntRect(224,79,235,85);
this->rectFundo = sf::IntRect(10,143,37,170);
this->rectInferiorEsquerdo = sf::IntRect(0,171,6,177);
this->rectInferiorMeio = sf::IntRect(91,171,97,177);
this->rectInferiorDireito = sf::IntRect(229,171,235,177);
//define RECTs
this->sprtSuperiorEsquerdo.SetSubRect(this->rectSuperiorEsquerdo);
this->sprtSuperiorMeio.SetSubRect(this->rectSuperiorMeio);
this->sprtSuperiorDireito.SetSubRect(this->rectSuperiorDireito);
this->sprtEsquerdo.SetSubRect(this->rectEsquerdo);
this->sprtDireito.SetSubRect(this->rectDireito);
this->sprtFundo.SetSubRect(this->rectFundo);
this->sprtInferiorEsquerdo.SetSubRect(this->rectInferiorEsquerdo);
this->sprtInferiorMeio.SetSubRect(this->rectInferiorMeio);
this->sprtInferiorDireito.SetSubRect(this->rectInferiorDireito);
}
/**
* Destrutor
*/
gui::Janela::~Janela()
{
//dtor
}
/**
* Método que desenha o objeto
*/
void gui::Janela::desenhar()
{
if ( this->visivel == true )
{
//inicializa variáveis de uso
float x, y, xFinal, yFinal;
//desenha o fundo primeiro
x = 0;
y = 0;
xFinal = (this->posX + this->largura);
yFinal = (this->posY + this->altura);
while( (x + this->posX) < xFinal)
{
while( (y + this->posY) < yFinal)
{
//valida pra ver se não vai estourar
if ((x + this->posX + this->sprtFundo.GetSize().x) > xFinal)
{
x = (x + this->posX + this->sprtFundo.GetSize().x) - xFinal;
}
if ((y + this->posY + this->sprtFundo.GetSize().y) > yFinal)
{
y = (y + this->posY + this->sprtFundo.GetSize().y) - yFinal;
}
//desenha
this->sprtFundo.SetPosition(x + this->posX, y + this->posY);
gui::Core::app->Draw( this->sprtFundo );
y += this->sprtFundo.GetSize().y;
}
x += this->sprtFundo.GetSize().x;
y = 0;
}
//desenha bordas repetitivas
//borda superior
x = 0;
y = 0;
while( (x + this->posX) < xFinal)
{
if ((x + this->posX + this->sprtSuperiorMeio.GetSize().x) > xFinal)
{
x = (x + this->posX + this->sprtSuperiorMeio.GetSize().x) - xFinal;
}
this->sprtSuperiorMeio.SetPosition(x + this->posX, this->posY);
gui::Core::app->Draw( this->sprtSuperiorMeio );
x += this->sprtSuperiorMeio.GetSize().x;
}
//desenha as bordas dos cantos
this->sprtSuperiorEsquerdo.SetPosition( this->posX, this->posY );
this->sprtSuperiorDireito.SetPosition( this->posX + this->largura - this->sprtSuperiorDireito.GetSize().x, this->posY );
this->sprtInferiorEsquerdo.SetPosition( this->posX, this->posY + this->altura - this->sprtInferiorEsquerdo.GetSize().y );
this->sprtInferiorDireito.SetPosition( this->posX + this->largura - this->sprtInferiorDireito.GetSize().x, this->posY + this->altura - this->sprtInferiorDireito.GetSize().y );
gui::Core::app->Draw( this->sprtSuperiorEsquerdo );
gui::Core::app->Draw( this->sprtSuperiorDireito );
gui::Core::app->Draw( this->sprtInferiorEsquerdo );
gui::Core::app->Draw( this->sprtInferiorDireito );
}
}
/**
* Método que verifica os status do teclado/mouse
*/
void gui::Janela::verificarInput()
{
if ( this->visivel == true )
{
//
}
}
What can be happen?