Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Djesteur

Pages: [1]
1
Système / Re: Problème de framerate
« le: Octobre 16, 2017, 01:07:41 pm »
Met nous ton code qui vérifie qu'un joystick est présent, on peut rien faire sans !

2
Système / Re: Crash lors de l’exécution de mon programme
« le: Octobre 16, 2017, 01:05:26 pm »
Sans ton code, on ne pourra rien faire pour toi   8)

3
Effectivement, quelqu'un l'a déjà fait  ;)
http://en.sfml-dev.org/forums/index.php?topic=2989.msg19529#msg19529

Merci de ta réponse !

4
Bonsoir.
Je n'ai pas vu de fonction dans l'API permettant de le faire, où alors j'ai raté quelque chose ?

Pour l'instant la SFML permet d'afficher un texte, de changer sa couleur, la taille des caractères, etc...
Néanmoins les changement s'appliquent sur tout le texte, et rien de permet par exemple de n'afficher qu'un seul mot en gras.
Si il n'y pas de plus grosses priorités, est-ce envisageable ?

5
Graphique / Re : Redimensionnement Qt + SFML
« le: Novembre 23, 2014, 12:03:42 pm »

Voila la même, en plus grande. La partie en noire est voulu, le reste est en cyan car je fais un clear(Color::Cyan); avant d'afficher le reste.

Et là l’intégralité de ma fonction redimensionner, qui est découpé en 2 partie. Tout d'abord le redimensionnement du widget parent (car les options sont des widget qui font parties de la fenêtre principale) :


if(resolution->currentText() == "800x600") { setFixedSize(800, 600); } // Je n'en met qu'un mais il y en a normalement plusieurs, pour plusieurs résolutions d'écran.

game->redimensionner();

 

et là l'intégralité de ma fonction redimensionner de mon objet game :

void Game::redimensionner(){

    resize(parent->size().width(), parent->size().height());

    setView(View(FloatRect(0, 0, size().width(), size().height())));

   // interface->resize(size().width(), size().height()); n'affecte en rien la taille du rendu/de la fenêtre

}
 

6
Graphique / Redimensionnement Qt + SFML
« le: Novembre 19, 2014, 04:43:42 pm »
Bonjour,

je n'arrive pas a redimensionner correctement mon rendu SFML, qui hérite de QSFMLCanvas, et qui est inclut dans un autre widget (ma fenêtre). J'ai essayé plusieurs choses (dont ce qui est proposé sur le tuto, à la différence que je redimensionne dans une de mes fonction et non lorsque la fenêtre est redimmensionné manuellement) mais j'arrive a chaque fois sur cela:



J'utilise ce code:


    resize(parent->size().width(), parent->size().height()); //parent est le widget parent

    setView(View(FloatRect(0, 0, size().width(), size().height())));

 

Une idée ?

7
Graphique / Re : Problème de sprite blanc
« le: Octobre 15, 2014, 03:09:37 pm »
Bonjour,  je suis (déjà) de retour avec un autre problème.

J'ai créé une classe Joueur qui possède un vector de personnages. Le problème vient de l'affichage car j'obtient un carré blanc, alors que lorsque j'utilise le constructeur de ma classe Personnage, la texture est (en tout cas devrait) être socké dans la variable m_textPerso.

Joueur.cpp
// Passage du constructeur concernant m_personnage qui est mon vector de Personnage
 m_personnage.push_back(Personnage()); // Le personnage sélectionné de base est juste un sprite transparent.
 while (getline(m_infosLvl, donneActuel)) {
        istringstream iss(donneActuel);

        while (iss >> nom >> posX >> posY) {
            m_personnage.push_back(Personnage(nom, posX, posY));
            m_nbPersos++;
        }
        if (!iss.eof()) { cout << "L'extraction a planté. Quel dommage" << endl;}
    }

void Joueur::draw(RenderWindow* app, Carte* carte){

    for (int i(0); i < m_nbPersos; i++){ m_personnage[i].draw(app);}
    m_personnage[m_personnageSelected].canMove(carte);
}
 

Personnage.cpp
Personnage::Personnage() {

    if (!m_textPerso.loadFromFile("textures\\rien.png")) { cout << "Erreur chargement : texture personnage" << endl; }
    m_infos.resize(8);
    for (int i(0); i<=7; i++) {m_infos[i] = 0;}
    m_spritePerso.setTexture(m_textPerso);
    m_spritePerso.setPosition(0, 0);
}
Personnage::Personnage(string persoName, int pixX, int pixY): m_persoName(persoName), m_pixX(pixX), m_pixY(pixY) {

    if (!m_textPerso.loadFromFile("textures\\" + m_persoName + ".png")) { cout << "Erreur chargement : texture personnage" << endl; }
    ifstream m_donnes ("donnes\\guerrier.txt"); if (m_donnes){} else { cout << "Erreur chargement : données personnage" << endl; }
    m_spritePerso.setTexture(m_textPerso);

    string ligneActuel;
    istringstream iss;

    m_infos.resize(8);

    for (int i(0); i<=7; i++) {
        getline(m_donnes, ligneActuel);
        istringstream iss (ligneActuel);
        iss >> m_infos[i];
    }

    m_spritePerso.setPosition(m_pixX*50, m_pixY*50);
}
void Personnage::draw (RenderWindow* app) {app->draw(m_spritePerso);}
 

Je ne pense pas que le problème vienne du constructeur de Personnage car je l'utilisait avant d'ajouter ma classe Joueur sans avoir de problèmes mais le sprite est blanc, donc sa texture n'est plus bonne :(

8
Graphique / Re : Problème view + sélection d'un sprite
« le: Octobre 12, 2014, 06:33:31 pm »
Bon, finalement après plusieurs tests, je n'arrive pas a vérifier qu'il n'y ai pas un mur entre mon personnage et la case où il peut se déplacer  :'( . J'ai essayé plusieurs chose comme rajouter une variable qui regarde si il y a un mur entre les deux, si oui cela met une variable à 1, et si elle est à 1 ne pas l'afficher mais ça fonctionne qu'à moitié. Voici le code que j'utilise pour vérifier si on peut se déplacer et afficher les cases correspondantes:

carte.cpp
// Première fonction qui affiche les cases où le personnage peut se déplacer
void Carte::getMove(int pixX, int pixY, int deplacement) { // pixX et pixY sont les coordonnées du personnage

    for (int i (0-deplacement); i <= deplacement; i++) {
        for (int j (0-deplacement); j <= deplacement; j++) {

            if(pixX+i < 0 || pixX+i >= m_mapx || pixY+j < 0 || pixY+j >= m_mapy){} // Vérifie que l'on essaye pas d accéder a une caseavec des coordonnées négatives (càd hors du tableau)
            else if ((pixX+i < 0 && pixY+j < 0) || (pixX+i < 0 && pixY+j >= m_mapy) || (pixX+i >= m_mapx && pixY+j < 0) || (pixX+i >= m_mapx && pixY+j >= m_mapy)) {}
            else if (m_tabSquare[pixX+i][pixY+j+1].getPassage() == 1){} // Si c'est un mur, ne rien faire
            else  if (abs(i) + abs(j) > deplacement) {} // Si le déplacement est de 3 et que j'affiche la case m_tabSquare[pixX+3][pixY+3], il faudra en fait un déplacement de 5 cases pour y accéder (mon personnage ne se déplace pas en diagonal)
            else if (i == 0 && j == 0) {} // Inutile de déplacer le personnage sur la case où il est actuellement
            else {m_tabSquare[pixX+i][pixY+j].moveSquare(); } //m_tabSquare est le tableau stockant toutes les cases de ma carte, la fonction moveSquare permettant d'afficher le sprite de déplacement si cela est possible
       
        }
    }

}

// Seconde fonction qui, si le déplacement sélectionné est bon, donne au personnage le droit de bouger (return 1 == peut bouger pour le personnage appelant cette fonction) et effacer les sprites de déplacement. Celles ci seront ré afficher avec la nouvelle position du personnage lors de l'utilisation de la fonction au dessus.
int Carte::moveOk(int pixSourisX, int pixSourisY, int deplacement){

    if (m_tabSquare[pixSourisX][pixSourisY].getAff() == 1) {

        for (int i (0); i < m_mapx; i++) {
            for (int j (0); j < m_mapy; j++) {
                if (m_tabSquare[i][j].getAff() == 1) { m_tabSquare[i][j].noMoveSquare(); } // Efface toutes les sprites de déplacement de la carte
                else {}
            }

        }
        return 1;}

    else {return 0;}
}
 

J'en profite pour demander quelque chose qui n'a rien avoir avec ce qu'il y a au dessus: je voudrait afficher une interface qui bouge en fonction de la vue, comment dois-je m'y prendre ? Utiliser 2 views ? Modifier les coordonnées du sprite lorsque je bouge la view principal ? (J'avoue que je n'ai pas bien compris la partie du tuto sur les views)

Edit: J'ai trouvé comment faire pour déplacer mon interface avec une view, mais du coup je retrouve le bug de départ ><.

Edit 2: J'ai corrigé mon bug, il suffisait de mettre en second paramètre la view que j'utilise lors de la conversion de la position de la souris en coordonnées monde.

9
Graphique / Re : Problème view + sélection d'un sprite
« le: Octobre 12, 2014, 01:08:05 pm »
En passant la vitesse à 10, le déplacement devient raisonnable. Je pense le rendre indépendant plus tard ( avec un Clock ?). En fait je pensait surtout régler où mon personnage peut aller. Pour l'instant il peut se déplacer de n cases, mais ça ne prend pas en compte si il y a un mur entre le personnage et une case nécessitant 2 ou 3 en déplacement :/

10
Graphique / Re : Problème view + sélection d'un sprite
« le: Octobre 12, 2014, 01:02:03 am »
Effectivement la vitesse de déplacement de la view ne dépend plus de la souris, mais du coup réduction de la vitesse obligée (disons que + - 50 pixel par boucle sa va un peut vite 8) )
Un grand merci encore une fois, je reposterai surement d'autres problèmes ici, la flemme de recréer un topic à chaque fois  :P

11
Graphique / Re : Problème view + sélection d'un sprite
« le: Octobre 11, 2014, 11:12:37 pm »
Super, ça marche nickel  :D
Par contre j'ai l'impression des fois que lorsque j'appuie une ou deux fois sur une touche fléchée , la view se décale beaucoup plus vite que le normale (plus vite que si je laisse appuyer sur une touche ou que si j'appuie plusieurs fois rapidement). J'ai encore raté quelque chose, ou cela vient-il de mon ordi/clavier (sans fils) ?

12
Graphique / Problème view + sélection d'un sprite
« le: Octobre 11, 2014, 10:37:27 pm »
Bonsoir,

j'ai un problème lorsque je déplace ma view et que j'essaye de déplacer un personnage.
Indépendamment, les deux fonctionnent très bien, mais quand je déplace ma view et que je clique sur un sprite avec la texture de sélection, le résultat est assez aléatoire : si je déplace une ou deux fois la view, le personnage ne va pas aller au bon endroit, et si je la déplace plus il ne bouge plus du tout.  :o
En revanche, pas de problèmes si je ne bouge pas ma vue.

Je n'ai mis que les parties concernées afin que la page ne fasse pas 3 km.

main.cpp
int main()
{
    RenderWindow app(VideoMode(1250, 750), "SFML window");
    Carte carte("lvl5");
    Personnage perso("hero1", 5, 3);
    View view1 = app.getDefaultView();


    while (app.isOpen())
    {

        Event event;
        while (app.pollEvent(event))
        {

            if (event.type == Event::MouseButtonReleased)
                {
                   if (event.mouseButton.button == Mouse::Right)

                    perso.bouge(event.mouseButton.x, event.mouseButton.y, &carte);
        }
            if (event.type == Event::Resized){
            FloatRect visibleArea(0, 0, event.size.width, event.size.height);
            app.setView(View(visibleArea));

        }

            if (Keyboard::isKeyPressed(Keyboard::Up)) { view1.move(0, -50);}
            if (Keyboard::isKeyPressed(Keyboard::Right)){view1.move(50, 0);}
            if (Keyboard::isKeyPressed(Keyboard::Down)){view1.move(0, 50);}
            if (Keyboard::isKeyPressed(Keyboard::Left)) {view1.move(-50, 0);}

            if (event.type == Event::Closed)
                app.close();
        }

        app.setView(view1);
        app.clear(Color::Blue);
        perso.canMove(&carte); // Vérifie où le personnage peut se déplacer et décide des sprites à afficher en conséquences
        carte.draw(&app);
        perso.draw(&app);
        app.display();
    }
    return EXIT_SUCCESS;
}
 

carte.cpp
void Carte::getMove(int pixX, int pixY, int deplacement) { // Fonction décrite juste au dessus (qui passe d'abord par le personnage)

    for (int i (0-deplacement); i <= deplacement; i++) {
        for (int j (0-deplacement); j <= deplacement; j++) {

            if (m_tabSquare[pixX+i][pixY+j+1].getPassage() == 0) {
                    if (abs(i) + abs(j) > deplacement) {}
                    else if (i == 0 && j == 0) {}
                    else { m_tabSquare[pixX+i][pixY+j].moveSquare(); }
                }

            else {}
        }

    }
}
 

personnage.cpp
Personnage::Personnage(){}
Personnage::Personnage(std::string persoName, int pixX, int pixY): m_pixX(pixX), m_pixY(pixY) {

    if (!m_textPerso.loadFromFile("textures\\" + persoName + ".png")) { cout << "Erreur chargement : texture personnage" << endl; }
    m_spritePerso.setTexture(m_textPerso);
    m_spritePerso.setPosition(m_pixX*50, m_pixY*50);
    m_deplacement = 3;

}
Personnage::~Personnage() {}

void Personnage::draw (RenderWindow* app) { app->draw(m_spritePerso); }
void Personnage::canMove (Carte* carte) { carte->getMove(m_pixX, m_pixY, m_deplacement); }
void Personnage::bouge (int sourisx, int sourisy, Carte* carte) {

    // Je convertit les coordonnées de la souris car ma carte est juste une image de plusieurs pixel
    int pixSourisX = round(sourisx/50);
    int pixSourisY = round(sourisy/50);

    if (carte->moveOk(pixSourisX, pixSourisY, m_deplacement) == 1)  {
            m_pixX = pixSourisX;
            m_pixY = pixSourisY;
            m_spritePerso.setPosition(m_pixX*50, m_pixY*50);

        }
    else {}
}
 

Merci d'avance pour vos réponses !

13
Graphique / Re : Problème affichage sprite
« le: Septembre 25, 2014, 08:37:17 pm »
Effectivement c'est pas terrible pour aller chercher l'affichage des sprites ;D
Mais du coup, si je supprime la variable qui est dans le constructeur, je ne l'initialise plus avec m_mapx et donc j’essaye juste en dessous d’accéder à des cases que mon vector ne connait pas. Or, si je supprime m_tabText qui est dans la déclaration de la classe, la fonction draw ne connait plus la variable ( et donc essayer d'afficher du vide donnera ... rien du tout) .
Y a t'il donc un moyen d'initialiser un vector 2d sans pour autant redéclarer la variable m_tabText ?

Edit : Bon en fait un simple  m_tabText.resize (m_mapx) avant la boucle était suffisant. Mais l'écran reste noir, sans aucune texture affichée  :-\

Edit 2: En fait j'ai refait la même erreur qu'au dessus, je déclare 2 fois m_mapx et m_mapy :P. Merci G. .

14
Graphique / Problème affichage sprite
« le: Septembre 25, 2014, 08:03:52 pm »
Bonjour,

j'essaye d'afficher une carte en Tilemap, mais le programme plante lors de l'affichage (pas de problèmes lors de la compilation). Je pense que le problème viens lorsque je fait ma boucle dans Carte::draw, mais je n'arrive pas a trouver pourquoi  :-\

carte.cpp

#include <iostream>
#include <string>
#include <vector>
#include "Carte.h"

using namespace std;
using namespace sf;

Carte::Carte() {}
Carte::Carte(string lvlname) {

    if (!m_carte.loadFromFile(lvlname + ".png")) { cout << "Erreur chargement : carte" << endl; }
    if (!m_textures.loadFromFile(lvlname + "textures.bmp")) { cout << "Erreur chargement : textures" << endl; }

    int m_mapx (m_carte.getSize().x);
    int m_mapy (m_carte.getSize().y);
    cout << "m_mapx vaut :" << m_mapx << endl;
    cout << "m_mapy vaut :" << m_mapy << endl;

    vector <vector <Square> > m_tabText(m_mapx);

    for (int i (0); i < m_mapx; i++) {
        for (int j (0); j < m_mapy; j++) {
            m_tabText[i].push_back(Square(attributionText(i, j), m_textures, i, j));
        }
    }
}

Carte::~Carte() {}

int Carte::attributionText(int x, int y) {

    if (m_carte.getPixel(x, y) == Color::Black) {return 0;}
    else if (m_carte.getPixel(x, y) == Color::Red) {return 1;}
    else if (m_carte.getPixel(x, y) == Color::Green) {return 2;}
    else if (m_carte.getPixel(x, y) == Color::Blue) {return 3;}
    cout << "Mauvaise attribution de texture" << endl; return 3;
}

void Carte::draw(RenderWindow* app) {

    for (int i (0); i < m_mapx; i++) {
        for (int j (0); j < m_mapy; j++) {
                m_tabText[i][j].draw(app);
        }
    }
}
 

carte.h


#include <string>
#include <vector>
#include <SFML/Graphics.hpp>

#include "Square.h"

class Carte {

public:

    Carte();
    Carte(std::string lvlname);
    ~Carte();
    void draw(sf::RenderWindow* app);

private:

    int attributionText(int i, int j);

    std::string m_lvlname;
    std::vector <std::vector <Square> > m_tabText;

    sf::Image m_carte;
    sf::Texture m_textures;
    sf::Sprite m_sprite;

    int m_numTexture;
    int m_mapx;
    int m_mapy;
    int m_tabColor;
    int m_nbColor;

};

square.cpp

#include <iostream>
#include <SFML/Graphics.hpp>
#include "Square.h"

using namespace std;
using namespace sf;

Square::Square() {}
Square::Square(int numTexture, sf::Texture& textures, int x, int y) {
   
    m_sprite.setTexture(textures);
    m_sprite.setTextureRect(IntRect(50*numTexture, 1, 50, 50));
    m_sprite.setPosition(Vector2f(50*x, 50*y));
}
Square::~Square() {}

void Square::draw(RenderWindow* app) { app->draw(m_sprite); }
 

square.h

#include <string>
#include <vector>
#include <SFML/Graphics.hpp>

class Square {

public:

    Square();
    Square(int numTexture, sf::Texture& textures, int x, int y);
    ~Square();
    void draw(sf::RenderWindow* app);

private:

    sf::Texture m_textures;
    sf::Sprite m_sprite;
    int m_numTexture;
    int m_x;
    int m_y;


};
#endif
 

J'ai fait une classe square (google.trad de "case",  pas sur que se soit ce qu'il y ai de mieux) car j'aimerai faire un T-RPG, donc je vais avoir besoin de savoir si il y a déjà quelqu'un dessus, combien cela coûte en déplacement pour passer par cette case, etc...

Merci d'avance pour vos réponses.

Pages: [1]