Bonjour à toutes et à tous, je tente de coder seul un projet de shoot em up mais mon problème actuel se situe dans l'organisation de mon code, j'ai réussi à faire quelques petits trucs e je vais continuer mais utilisant la bibliothèque SFML, je n'arrive pas a utiliser des classes avec un cpp ET un .h, actuellement ce que je fais fonctionne mais j'ai main.cpp vaisseau.h(ou tout est codé dedans) et d'autres choses qui ne nous intéressent pas actuellement. J'ai tenté de mettre un .cpp et un .h (je sais que j'ai aussi la fonction projectile dedans que j'enleverai) et ca donne ca
main.cpp
- pragma region Includes
- include <SFML/Graphics.hpp>
- include <stdio.h>
- include <iostream>
- include "vaisseau.h"
- include "fond.h"
- include "monstre.h"
- include "projectile.h"
- pragma endregion
- pragma region Main
int main()
{
window.setSize(Vector2u(800, 1100));
window.setPosition(Vector2i(500, 0));
window.setFramerateLimit(60);
vaisseau monVaisseau;
fond monFond;
vaisseau monProjectile;
monstre monMonstre;
//projectile monProjectile;
monFond.chargement();
monVaisseau.chargement();
monMonstre.chargement();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
monFond.affichage();
monVaisseau.deplacement();
monVaisseau.projectile();
monMonstre.affichage();
window.display();
}
- pragma endregion
return 0;
}
vaisseau.cpp
- include <SFML\Graphics.hpp>
- include "vaisseau.h"
using namespace std;
using namespace sf;
void vaisseau::chargement()
{
textVaisseau.loadFromFile("images/vaisseau.png");
spriteV.setTexture(textVaisseau);
spriteV.setPosition(920, 930);
spriteV.setScale(0.8, 0.35);
textProjectile.loadFromFile("images/Projectile2.png");
spriteP.setTexture(textProjectile);
spriteP.setScale(3, 1.5);
spriteP.setPosition(-50, -50);
}
void vaisseau::deplacement()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
spriteV.move(Vector2f(-40, 0));
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
spriteV.move(Vector2f(40, 0));
}
if (spriteV.getPosition().x < 0)
{
spriteV.setPosition(Vector2f(0, spriteV.getPosition().y));
}
if (spriteV.getPosition().x > 1730)
{
spriteV.setPosition(Vector2f(1730, spriteV.getPosition().y));
}
//cout << spriteV.getPosition().x << endl;
window.draw(spriteV);
}
- pragma endregion
- pragma region Projectile
void vaisseau::projectile()
{
if (oneTime == true)
{
oneTime = false;
}
timeProjectile = clockProjectile.getElapsedTime();
if (timeProjectile.asSeconds() > 0.1 + t && conditionDepla1 == false)
{
posPos1.x = spriteV.getPosition().x;
posPos1.y = spriteV.getPosition().y;
spriteP.setPosition(Vector2f(posPos1.x + 70, posPos1.y - 50 - x * 20));
x++;
}
if (timeProjectile.asSeconds() > 0.9 + t)
{
conditionDepla1 = false;
spriteP.setPosition(Vector2f(-100, -100));
x = 0;
}
while (timeProjectile.asSeconds() > 1 + t)
{
t = t + 1;
}
window.draw(spriteP);
}
- pragma endregion
vaisseau.h
- ifndef __vaisseau__
- define __vaisseau__
- include <string>
- pragma region Initialisation
using namespace sf;
using namespace std;
RenderWindow window(sf::VideoMode(1930, 1100), "Projet FSTU ALPHA!");
- pragma endregion
- pragma region Déclarations
class vaisseau
{
public:
vaisseau();
~vaisseau();
void chargement();
void deplacement();
void projectile();
int positionX;
int positionY;
private:
Texture textVaisseau;
Sprite spriteV;
Texture textProjectile;
Sprite spriteP;
Clock clockProjectile;
Time timeProjectile;
bool oneTime = true;
bool conditionDepla1 = false;
Clock clockAttaque;
Time timeAttaque;
int x = 0;
float t = 0;
Vector2f posPos1;
};
- pragma endregion
- pragma region Vaisseau
vaisseau::vaisseau()
{
}
vaisseau::~vaisseau()
{
}
- endif
et mes erreurs sont :
Gravité Code Description Projet Fichier Ligne État de la suppression
Erreur LNK2005 "class sf::RenderWindow window" (?window@@3VRenderWindow@sf@@A) déjà défini(e) dans main.obj FSTU2 C:\Users\alane\Documents\FSTU2\FSTU2\vaisseau.obj 1
Erreur LNK2005 "public: __thiscall vaisseau::vaisseau(void)" (??0vaisseau@@QAE@XZ) déjà défini(e) dans main.obj FSTU2 C:\Users\alane\Documents\FSTU2\FSTU2\vaisseau.obj 1
Erreur LNK2005 "public: __thiscall vaisseau::~vaisseau(void)" (??1vaisseau@@QAE@XZ) déjà défini(e) dans main.obj FSTU2 C:\Users\alane\Documents\FSTU2\FSTU2\vaisseau.obj 1
Erreur LNK1169 un ou plusieurs symboles définis à différentes reprises ont été rencontrés FSTU2 C:\Users\alane\Documents\FSTU2\Debug\FSTU2.exe 1