Bonjour à tous !
J'utilise depuis un moment la SFML, mais j'ai jamais crée des objets, je me suis contenter d'utiliser la librairie !
Aujourd'hui j'essaye de me mettre a l'orienté objet, j'ai essayer et ça a bloquer.
J'ai eu une erreur d'inclusion croiser, maintenant que cette erreur et corriger mon programme compile mais les déplacement effectuer avec la fonction move() ne fonctionne plus !
Voici mon code :
(projet en archive : http://www.fichier-zip.com/2015/09/29/obj-try-hard-oth/ (http://www.fichier-zip.com/2015/09/29/obj-try-hard-oth/))
main.cpp:
#include "engine.h"
int main()
{
Engine engine;
engine.run();
return 0;
}
engine.cpp
#include "engine.h"
#include <stdlib.h>
#include <iostream>
#include <SFML/System.hpp>
#include "personnage.h"
using namespace std;
using namespace sf;
Engine::Engine() : r_window(sf::VideoMode(800,600),"Test by Marcel")
{
marcel = new Personnage;
}
void Engine::run()
{
while(r_window.isOpen())
{
processEvents();
update();
render();
p_move();
}
}
void Engine::render()
{
r_window.clear();
r_window.draw(marcel->get_perso());
r_window.display();
}
void Engine::update()
{
}
void Engine::processEvents()
{
sf::Event event;
while(r_window.pollEvent(event))
{
if((event.type == sf::Event::Closed) or (event.type == sf::Event::KeyPressed) and (event.key.code == sf::Keyboard::Escape))
{
r_window.close();
}
}
}
void Engine::p_move()
{
system("cls");
marcel->set_p_pos(marcel->get_perso().getPosition().x+5, marcel->get_perso().getPosition().y+5 );
cout << "X" << marcel->get_p_pos().x << "Y" << marcel->get_p_pos().y << endl;
cout << "Inertie" << marcel->get_inertie() << endl;
if(Keyboard::isKeyPressed(Keyboard::Z))
{
marcel->get_perso().move(0,-2*marcel->get_inertie());
marcel->set_inertie(0.01);
}
if(Keyboard::isKeyPressed(Keyboard::S))
{
marcel->get_perso().move(0,2*marcel->get_inertie());
marcel->set_inertie(0.01);
}
if(Keyboard::isKeyPressed(Keyboard::Q))
{
marcel->get_perso().move(-2*marcel->get_inertie(),0);
marcel->set_inertie(0.01);
}
if(Keyboard::isKeyPressed(Keyboard::D))
{
marcel->get_perso().move(2*marcel->get_inertie(),0);
marcel->set_inertie(0.01);
}
marcel->set_inertie(-0.01);
}
engine.h
#ifndef DEF_ENGINE
#define DEF_ENGINE
#include <SFML/Graphics.hpp>
#include "personnage.h"
#include <SFML/Window.hpp>
class Engine
{
private:
void processEvents();
void update();
void render();
Personnage *marcel;
sf::RenderWindow r_window;
public:
Engine();
void run();
void p_move();
};
#endif
personnage.cpp
#include <SFML/System.hpp>
#include "personnage.h"
#include <iostream>
using namespace std;
using namespace sf;
Personnage::Personnage(int p_speed, float p_inertie, char* p_name, sf::Color p_couleur)
{
this->p_speed = p_speed;
this->p_inertie = p_inertie;
this->p_name = p_name;
this->p_couleur = p_couleur;
perso.setFillColor(p_couleur);
perso.setSize(sf::Vector2f(10,10));
}
Personnage::Personnage(int p_speed,float p_inertie)
{
this->p_speed = p_speed;
this->p_inertie = p_inertie;
perso.setFillColor(sf::Color::Blue);
perso.setSize(sf::Vector2f(10,10));
perso.setPosition(50,50);
}
float Personnage::get_inertie()
{
return p_inertie;
}
float Personnage::set_inertie(float p_inertie_multy)
{
p_inertie +=0.01+p_inertie_multy;
cout << "test";
}
RectangleShape Personnage::get_perso()
{
return perso;
}
Vector2f Personnage::get_p_pos()
{
return p_pos;
}
Vector2f Personnage::set_p_pos(int x,int y)
{
p_pos = Vector2f(x,y);
}
int Personnage::get_speed()
{
return p_speed;
}
personnage.h
#ifndef DEF_PERSONNAGE
#define DEF_PERSONNAGE
#include <SFML/Graphics.hpp>
class Personnage
{
private:
int p_speed;
float p_inertie;
char* p_name;
sf::Color p_couleur;
sf::RectangleShape perso;
sf::Vector2f p_pos;
public:
Personnage(int p_speed, float p_inertie, char* p_name, sf::Color p_couleur);
Personnage(int p_speed, float p_inertie);
float get_inertie();
float set_inertie(float p_inertie_multy);
int get_speed();
sf::Vector2f get_p_pos();
sf::Vector2f set_p_pos(int x,int y);
sf::RectangleShape get_perso();
};
#endif
Voilà merci pour votre aide.