Piszę ostatnio prostą gierkę (snake) przy użyciu SFML.
Napotkałem niestety na pewien błąd. Gdy program tworzy gracza to występuje wyciek pamięci RAM.
Sam nie mogłem znaleźć błędu dlatego proszę was o pomoc.
Kod z prawdopodobnym miejsce wycieku:
metody klasy Player
Player::Player(int n)
{
points=rotation=0;
length=3;
deltaX=-1;
deltaY=0;
loadTexture();
for(int i=0;i<n;i++)
{
int j=0;
if(i=0)
{
if(i==n-1)
{
j=2;
}
else
{
j=1;
}
}
snake.push_back(Snake((16+i)*40-20,9*40-20,j,&texture,0));
}
}
Player::~Player()
{
//dtor
}
void Player::loadTexture()
{
if(!texture.loadFromFile("data/texture/playerSet.png"))
{
MessageBox(NULL,"PlayerSet not found!","ERROR",NULL);
return;
}
}
jej plik .h:
#ifndef PLAYER_H
#define PLAYER_H
#include <vector>
#include "Snake.h"
#include <windows.h>
using namespace sf;
using namespace std;
class Player
{
public:
Player(int=3);
virtual ~Player();
void draw(RenderWindow *);
int getPoints();
void add();
void move(int,int);
void update();
Vector2f getPosition();
private:
vector <Snake> snake;
int length;
int points;
Texture texture;
int deltaX;
int deltaY;
int rotation;
void loadTexture();
};
#endif // PLAYER_H
klasa snake:
#ifndef SNAKE_H
#define SNAKE_H
#include <SFML/Graphics.hpp>
using namespace sf;
class Snake
{
public:
Snake(int,int,int,Texture*,int=0);
virtual ~Snake();
void draw(RenderWindow *);
Vector2f getPosition();
void setNumber(int);
void setPosition(Vector2f,int);
void move(int,int,int);
int getRotation();
private:
Sprite sprite;
int number;
int rotation;
Vector2f position;
Texture *texture;
void setSprite();
void setSpritePosition();
};
#endif // SNAKE_H
i jej metody:
nake::Snake(int xx,int yy,int n,Texture *tex,int r)
{
position.x=xx;
position.y=yy;
number=n;
rotation=r;
texture=tex;
sprite.setTexture(*texture);
setSprite();
setSpritePosition();
}
Snake::~Snake()
{
//dtor
}
void Snake::setSprite()
{
switch(number)
{
case 0:
sprite.setTextureRect(IntRect(0,0,40,20));
break;
case 1:
sprite.setTextureRect(IntRect(40,0,40,20));
break;
case 2:
sprite.setTextureRect(IntRect(80,0,40,20));
break;
}
sprite.setOrigin(Vector2f(20,10));
sprite.setRotation(rotation);
}
Vector2f Snake::getPosition()
{
return position;
}
int Snake::getRotation()
{
return rotation;
}
void Snake::move(int xx,int yy,int rot)
{
position.x+=xx*40;
position.y+=yy*40;
rotation=rot;
}
void Snake::setPosition(Vector2f vec,int rot)
{
position=vec;
rotation=rot;
setSpritePosition();
}
void Snake::setSpritePosition()
{
sprite.setPosition(position);
}
void Snake::setNumber(int n)
{
number=n;
}
void Snake::draw(RenderWindow *win)
{
win->draw(sprite);
PS Znacie funkcje w SFML zwracającą pozycję sprite?
Z góry dzięki za odpowiedzi.