Salut à tous. Etant débutant avec la SFML, j'ai décidé de créer un petit PacMan-Like pour m'entrainer.
Pour le moment, je n'en suis qu'à la gestion des déplacement des entités.
Le problème c'est que je n'arrive pas à déplacer ma sprite en négatif(pour les déplacements vers la gauche et le haut).
Je poste mon code:
main.cpp#include <iostream>
#include <SFML\Graphics.hpp>
#include "Entity.h"
using namespace sf;
using namespace std;
int main(int argc, char *argv[]){
RenderWindow app(VideoMode(800,600, 32), "TEST");
Entity player("sprite.png",Vector2i(21,538) ,Vector2i(14,14));
app.setFramerateLimit(60);
while(app.isOpen()){
Event event;
while(app.pollEvent(event)){
if(event.type == Event::Closed || Keyboard::isKeyPressed(Keyboard::Escape))
app.close();
player.move();
}
app.clear();
app.draw(player.getSprite());
app.display();
}
return 0;
}
Display.cpp#include "Display.h"
using namespace sf;
using namespace std;
Display::Display(){}
Display::Display(string file, Vector2i pos, Vector2i size)
:m_file(file), m_pos(pos), m_size(size){
setSprite();
m_tex.setSmooth(true);
}
Sprite Display::getSprite() const{
return m_sprite;
}
void Display::setSprite(){
if(!m_tex.loadFromFile(m_file, IntRect(m_pos.x, m_pos.y, m_size.x, m_size.y))){
cout << "ERROR: The file " << m_file << " cannot be loaded !" << endl;
}
else
m_sprite.setTexture(m_tex);
}
void Display::changeSprite(Vector2i pos){
m_pos = pos;
setSprite();
}
void Display::moveSprite(char dir){
switch (dir){
case 'U':{
m_sprite.move(0.0f, -m_size.x);
}
case 'D':{
m_sprite.move(0, m_size.y); // Y
}
case 'L':{
m_sprite.move(-m_size.x, 0); // -X
}
case 'R':{
m_sprite.move(m_size.x, 0); // X
}
default:
break;
}
}
Display.h#ifndef DISPLAY_H
#define DISPLAY_H
#include "includes.h"
class Display{
public:
Display();
Display(std::string file, sf::Vector2i pos, sf::Vector2i size);
sf::Sprite getSprite() const;
void setSprite();
void changeSprite(sf::Vector2i pos);
void moveSprite(char dir);
private:
sf::Texture m_tex;
sf::Sprite m_sprite;
std::string m_file; // Path to texture file.(jpg, png, gif)
sf::Vector2i m_size; // Sprite size
sf::Vector2i m_pos; // Sprite position on texture file
};
#endif
Entity.cpp#include "Entity.h"
using namespace sf;
Entity::Entity(std::string file, Vector2i pos, Vector2i size){
m_entity = new Display(file, pos, size);
}
Entity::~Entity(){
delete m_entity;
}
void Entity::move(){
if(Keyboard::isKeyPressed(Keyboard::Up)){
m_entity->moveSprite('U');
std::cout << "UP" << std::endl;
}
if(Keyboard::isKeyPressed(Keyboard::Down)){
m_entity->moveSprite('D');
std::cout << "DOWN" << std::endl;
}
if(Keyboard::isKeyPressed(Keyboard::Left)){
m_entity->moveSprite('L');
std::cout << "LEFT" << std::endl;
}
if(Keyboard::isKeyPressed(Keyboard::Right)){
m_entity->moveSprite('R');
std::cout << "RIGHT" << std::endl;
}
}
sf::Sprite Entity::getSprite() const{
return m_entity->getSprite();
}
Entity.h#ifndef ENTITY_H
#define ENTITY_H
#include "includes.h"
#include "Display.h"
class Entity{
public:
Entity(std::string file, sf::Vector2i pos, sf::Vector2i size);
~Entity();
sf::Sprite getSprite() const;
void move();
private:
Display *m_entity;
};
#endif
Donc comme vous pouvez le voir, j'essaie de déplacer ma sprite avec une valeur négative(via la variable m_size.x) mais lorsque j’exécute le programme, rien ne se passe.
Je précise que si je passe une valeur numérique sans passer par une variable, la sprite se déplace.
Je ne comprends pas trop le problème.
Merci