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.


Sujets - yhu420

Pages: [1] 2 Suivante »
1
Général / [Résolu]Problème de collisions
« le: Août 19, 2016, 05:27:26 pm »
Bonjour tout le monde,

Je viens d'implémenter une fonction pour gérer les collisions entre deux formes convexes. Après deux heures de relecture, je ne parviens toujours pas à trouver le problème, pourtant je suis certain que ça ne tient pas à grand chose.
La fonction suivante renvoie systématiquement 'false'.

bool shapesCollideCustom(const sf::ConvexShape & first, const sf::ConvexShape & second)
{
        //https://openclassrooms.com/courses/theorie-des-collisions/formes-plus-complexes
        //article is in french, but is really helpful
        //Way easier and faster than the SAT everyone seem to talk about

        const std::size_t pointCount1 = first.getPointCount();
        const std::size_t pointCount2 = second.getPointCount();

        for (std::size_t i = 0; i < pointCount2; i++)
        {
                //Vector AB is vector point[i]point[i+1]
                //Here we are setting point A and point B

                //Point A = tab[i];
                sf::Vector2f B;
                if (i == pointCount2 - 1)  // si c'est le dernier point, on relie au premier
                        B = second.getTransform().transformPoint(second.getPoint(0));
                else           // sinon on relie au suivant.
                        B = second.getTransform().transformPoint(second.getPoint(i + 1));

                //vector D = vector AB
                const sf::Vector2f D(getVectorTwoPoints(second.getTransform().transformPoint(second.getPoint(i)), B));

                //Vector T = vector AP
                for (std::size_t j = 0; j < pointCount1; j++)
                {
                        const sf::Vector2f T(getVectorTwoPoints(second.getTransform().transformPoint(second.getPoint(i)), first.getTransform().transformPoint(first.getPoint(j))));

                        if (D.x*T.y - D.y*T.x < 0)
                                return false;  // un point à droite et on arrête tout.
                }
        }
        return true;  // si on sort du for, c'est qu'aucun point n'est à gauche, donc c'est bon.
}

Je vous remercie d'avance pour vos suggestions!  :D

2
Général / [Résolu]Eviter 'Ne réponds pas'
« le: Juin 20, 2016, 03:51:02 pm »
Bonjour,
Je suis en train de développer un petit projet, et j'autilise souvent une méthode qui ressembe à cela:
void ErrorManager::displayImportantConsole(const std::string& message)
{
        std::cout << message << std::endl;
        std::cout << "Press a key to continue.." << std::endl;
        while (!std::cin.get())
        {
                point_to_window->pollEvent(*point_to_event);
                point_to_window->display();
        }
        fflush(stdin);
}

La boucle a pour seul rôle de faire en sorte que la fenêtre continue de répondre en même temps que la console... en vain.
Je sais bien que ce n'est pas la manière conventionnelle d'utiliser SFML, mais là je cherche juste à comprendre ce qu'il se passe pour la fenêtre.
Ma connaissance sur la gestion des évènements n'est sûrement pas assez grande pour pouvoir résoudre ce problème, alors je compte sur vous  ;D
Merci

3
Général / Conseils pour collisions
« le: Avril 21, 2016, 09:03:26 pm »
Bonjour,
J'aurai besoin d'aide sur un problème de collision.
J'aimerai pouvoir déterminer si oui ou non deux convexshapes sont en collision, ou un convexshape et un floatrect.

Un personnage a une hitbox en forme de triangle ( un convexShape ), comment faire pour tester si cette convexshape est en collision avec soit une bounding box, soit une autre convexshape?

Je sais que pour un drawable, on a généralement la méthode intersects, mais elle ne permet que de comparer deux floatrects.

Si vous avez besoin d'informations supplémentaires ou si je n'ai pas été clair, dites le moi  ;D

Merci

4
Projets SFML / [Recherche de devs, graphistes]Projet de de jeu type shmup
« le: Février 27, 2015, 12:01:46 am »
Bonjour à tous,
Cela fait un bout de temps que j'avais en tête de programmer un  jeu à l'aide de SFML. Il se trouve maintenant que j'ai fini les bases du jeu, soit le menu, le shop, les crédits, etc, et je me rends compte que j'aurais sûrement besoin d'aide!
Le jeu n'étant pas vraiment commencé, la part d'un volontaire dans l'équipe serait assez importante.
J'ai bien dit volontaire, car en effet, je ne souhaite pas dépenser 1 centime pour la conception de ce jeu! Si je souhaite créer un jeu c'est pour le plaisir (comme c'est mignon  ::) )... et aussi pour faire bien sur mon futur CV, en effet je suis jeune (17 ans) et avoir développé un jeu avant même d'avoir son bac semble pouvoir être un point positif.
Je n'ai pas vraiment d'idée fixe en tête, j'ai donc besoin d'un copilote, voire pilote pour mener à bien ce projet.
Pas besoin d'être un malade de C++ pour pouvoir oser m'envoyer un PM, j'avoue être également un galèrien de temps à autres, je suis encore en train d'apprendre. Je tiens aussi à noter qu'un graphiste serait également une aide dont je ne pourrais me passer.
Bref, si vous êtes intéréssé(e)(s)  ;D envoyez moi un PM ou commentez, ça me ferait super plaisir!
Merci d'avance

PS: Merci aussi de m'indiquer si ce topic n'est pas à sa place, ou si ce forum est inapproprié!

5
Général / [Résolu]Problème .. inconnu ?
« le: Février 21, 2015, 05:41:31 pm »
Bonjour tout le monde,
Je n'arrive pas à comprendre la source de mon problème, tout simplement, ce n'est pas même forcément lié à SFML, je n'ai aucune idée d'où l'erreur vient...
Vous remarquerez que j'ai pété un plomb avec le debugger, et que j'ai donc débuggé comme un bleu à coup de cerr  ;D. Assez parlé, voila le code
//Dans Menu.hpp

virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const
        {
                if(isAtMain)
                {
                        //...
                        std::cerr << "0 - mainvessel exists : " << (bool)mainVessel;
                        target.draw(*mainVessel);
                        std::cerr << "1";
                        target.draw(*Play);
                        std::cerr << "2";
                        //...

protected:
FullSprite *mainVessel;
};
 
Dans fullsprite.hpp
class FullSprite : public sf::Drawable //Used to be a struct, that's why it is not, well, traditional
{
public:
        virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const
        {
                target.draw(*m_sprite); //m_sprite est un sf::sprite
                std::cerr << "sprite exists: " << (bool)m_sprite;
        }
 

Pour expliquer tout ca: la console affiche "mainvessel exist: 1", ce qui signifie que l'instruction executée est bien celle désirée. L'instruction suivante ( target.draw(*mainVessel);) va être exécutée. Pour voir plus en détail les instructions suivantes, il faut donc se rendre dans la méthode draw de FullSprite. Les deux lignes qui constituent cette méthode sont vien exécutées, la console indique que le sprite existe.
A présent, la prochaine instruction qui doit être exécutée est
std::cerr << "1";
si je ne me trompe pas, pas d'erreur jusqu'ici, non?
Eh bien non, mon programme crashe entre les deux dernières instructions, visual studio m'indiquant en chemin :
Aucun symbole n'a été chargé: /*bla bla*/
Emplacement d'origine: C:\Users\monNom\Projets\SFML\DatBlaster\Release\sfml-graphics-2.dll

Je trouve cela étrange puisque j'ai déjà réussi à faire tourner mon programme sans soucis, les modifications dernières n'ayant aucun rapport avec cette partie du code.
Je suis sous Windows 7 x64 avec SFML 2.2.
Dites moi si vous avez une idée, ou simplement besoin de plus d'infos
Merci d'avance

6
Discussions générales / Compatibilité 2.1 -> 2.2
« le: Février 02, 2015, 01:51:06 pm »
Bonjour tout le monde,
Ca fait un bail que j'ai commencé un projet avec SFML 2.1, je voulais savoir si il est possible de le reprendre dans visual studio 2012 avec SFML 2.2. Si oui, quelle version télécharger?
Merci beaucoup  :)

7
Général / Boite de dialogue simple
« le: Avril 27, 2014, 06:30:08 pm »
Bonjour tout le monde,
J'ai vite fait essayé de créer une simple boite de dialogue si on peut appeler ca, faite d'un sf::rectangleshape et d'un sf::shape.
Le but est donc de draw la shape puis le texte.
En gros, je m'y suis pris comme ca:
class fenetre : public rectangleshape
{
public:
fenetre(){m_texte.setString("Hello world"); setfillcolor(); setposition() etc etc};

        virtual unsigned int getPointCount() const
        {
                return getPointCount();
        }
        virtual sf::Vector2f getPoint (unsigned int index) const
        {
                return getPoint(index);
        }

private:
sf::Text m_text;
}
 

C'est là que mes deux questions interviennent.
1) Est-ce qu j'hérite de la bonne classe? (sf::Drawable n'est il pas mieux?)
2)Si oui, où j'affiche le texte?

Aussi j'ai essayé d'implémenter draw dans cette classe avec les deux autres fonctions virtuelles, en faisant:
target.draw(*this);
target.draw(m_text);

mais au niveau du draw (this) j'ai un stack overflow et donc je pense que c'est pas la bonne voie.
Merci pour vos réponses  :D

8
Général / Comment faire des collisions propres?
« le: Avril 27, 2014, 03:11:21 pm »
Bonjour tout le monde,
je suis en plein dans un petit projet et je me retrouve face à un problème: je dois gérer PLEIN de collisions. Alors vous me direz c'est tout simple il faut utiliser contains(arg) et le tour est joué, oui mais alors ca veut dire que, à chaque frame, je dois re-calculer toutes les collisions possibles entre tous les objets à l'écran?  ???
Je pense pas que ce soit très propre et j'imagine pas les performances pourries que je vais avoir avec ça..
Donc ma question c'est: C'est quoi la structure ou le truc, pour faire des collisions bien comme il faut?
Merci  ;)

9
Graphique / [Résolu]Comment retrouver la position d'un point?
« le: Avril 14, 2014, 09:10:37 am »
Bonjour tout le monde,
Comme ça ça a l'air facile de retrouver la position absolue d'un point, mais comment faire pour trouver la position absolue d'un point d'une shape?
getPoint ne renvoie que des valeurs relatives à la shape
Par exemple
sf::Rectangleshape x;
x.setPosition(100,100);
x.setSize(200, 100);
std::cout << x.getPoint(1).x; //J'ai pas compilé mais normalement ca renvoie 200
//car le point est éloigné de 100px du point 0
//comment faire pour trouver la position absolue? (300)
 
Merci

10
Général / sf::sprite et sf::rectangleShape
« le: Janvier 09, 2014, 06:02:28 pm »
Bonjour tout le monde,
J'ai juste une toute petite question idiote qui m'est venue comme ça par hasard dans la journée, c'est plutôt une question de débutant qui tatonne, quelle est la différence entre un sf::sprite et un sf::rectangleShape, étant donné qu'on peut leur appliquer une sf::texture?
Le résultat attendu sera le même, et les principales méthodes resteront disponibles dans les deux cas non?  :o
Merci pour toutes vos réponses

11
Général / ConvexShape ne prends pas les couleurs
« le: Janvier 05, 2014, 06:03:03 pm »
Bonjour tout le monde,
J'ai récemment fait une classe de rectangle arrondi, et j'aimerai lui donner des couleurs.
J'ai donc fait un code basique, assez simple..
Main.cpp
int main() //évidemment j'ai réduit mon code la
{
RoundRect * rect2= new RoundRect(sf::Vector2f(10.f,230.f), sf::Vector2f(300.f,50.f), 20, 5,sf::Color::Yellow, sf::Color::Cyan, 3);
RoundRect * rect = new RoundRect(sf::Vector2f(10.F,10.f), sf::Vector2f(200.f, 200.f), 10.f, 10, sf::Color::Green, sf::Color::Blue, 2);

window.clear();
window.draw(*rect);
window.draw(*rect2);
window.display();
return 0;
}
 

RoundRect.hpp
class RoundRect : public sf::Shape
{
public:
         RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius, const int unsigned& pointCount, const sf::Color& fillcolor, const sf::Color& outColor, const float& outThickness);
        ~RoundRect();

        virtual unsigned int getPointCount() const
        {
                return m_shape.getPointCount();
        }
        virtual sf::Vector2f getPoint (unsigned int index) const
        {
                return m_shape.getPoint(index);
        }

private:
        sf::ConvexShape m_shape;
};
 

Et pour finir, le .cpp
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius,  const int unsigned& pointCount, const sf::Color& fillcolor, const sf::Color& outColor, const float& outThickness)
{
        //Un gros constructeur
        m_shape.setOutlineThickness(outThickness);
        m_shape.setFillColor(fillcolor);
        m_shape.setOutlineColor(outColor);
        update();
}
 

Mais, mes "rectangles" restent blancs  :-[ . Pourtant, j'ai bien des formes convexes..
Si quelqu'un aurait une idée ça serait sympa de la poster  ;D

12
Général / Problème de points avec convexShape
« le: Janvier 04, 2014, 01:58:28 pm »
Bonjour tout le monde,
Je rencontre un problème avec ConvexShape, mais je suis quasiment certain que c'est de ma faute..
J'essaye de faire un rectangle arrondi mais le résulat ne suit pas  :-[ j'ai qulques points qui se trouvent a des endroits improbables( voir la piece jointe ) j'ai entouré, pour un coin, deux points qui ne sont meme pas listé dans ma shape et tracé en vert la forme qu'elle devrait normalement avoir.
Evidemment vous ne pourrez pas m’aider sans code:
C'est long, mais la moitié c'est du "debug"  ;)
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius,  const int unsigned& pointCount)
{
        unsigned int i;
        m_shape.setPointCount(pointCount*4); // m_shape est un sf::conexshape
        for(i=0;i<pointCount;++i) //ANGLE 1
        {
                m_shape.setPoint(i, sf::Vector2f(position.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount; i<pointCount*2; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x + borderRadius - borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount*2; i<pointCount*3; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y + dimensions.y - borderRadius + borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount*3; i<pointCount*4; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)), position.y + dimensions.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        update();
}
 
Est-ce que quelqu'un sait d'où ca vient  :o
Merci

13
Général / Objet invisible
« le: Janvier 01, 2014, 11:41:33 am »
Bonjour tout le monde,
J'ai un problème avec un sf::rectangleshape qui n'apparaît pas à l'écran. Vous allez me dire "T'as oublié le draw" mais non, d'ailleurs je le fais d'une façon un peu sale qui consiste à appeler directement un pointeur vers la fenêtre principale. Allez voila le code:

//Avant tout, la position de leftdoor est -500,0 et rightDoor 1000,0
else if(une condition que j ai vérifiée: elle marche)
        {//Boucle while : tout le reste est censé rester immobile
                while(leftDoor->getPosition().x < 0.f) //BAhaha c'est sale! Je sais merci.
                {
                        leftDoor->move(1000.f * Var.deltaTime , 0.f); //leftDoor est un RSPrite, taille 500x600, et Var.toWindow est un sf::renderwindow* de taille 1000x600
                        rightDoor->move(-1000.f * Var.deltaTime, 0.f); //rightDoor idem: 500x600

                        Var.toWindow->clear(); //Var.toWindow est un pointeur global qui pointe vers l'unique fenetre de l'application
                        Var.toWindow->draw(*leftDoor); //la fonction draw arrive
                        Var.toWindow->draw(*rightDoor);

                        std::cerr << leftDoor->getPosition().x << "  " << leftDoor->getPosition().y << std::endl;
                }
                leftDoor->setPosition(0,0);
                rightDoor->setPosition(500,0);
//D'autres trucs encore
        }
 
voila pour mon fichier Menu.cpp

Pour que vous puissiez comprendre je vous met mon RSprite.hpp
#pragma once

#include <SFML/Graphics.hpp>
#include <iostream>

class RSprite : public sf::Drawable
{
public:
        RSprite(const std::string&, const float& width, const float &height);
        //Des methodes
        virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const
        {
                target.draw(*m_Rshape);
        }

private:
        sf::RectangleShape *m_Rshape;
        sf::Texture *m_texture;
};
 

Ce a quoi je m'attendais c'était que leftdoor vienne de la gauche et move jusu'a couvrir la moitié de l'écran et idem pour rightDoor.
Ce qui se passe, c'est que lorsque la condition est effectuée, tout se freeze le temps que les doors arrivent, mais elles, n'apparaîssent pas à l'écran  :-\

J'espere que quelqu'un pourra m'aider  :P
Merci

14
Général / Objet qui se déplace tout seul
« le: Décembre 07, 2013, 11:28:24 am »
Bonjour tout le monde,
J'essaye en ce moment de me créer une classe Bullet qui me servira pour tous mes futurs chef d'oeuvres, et je me retrouve confronté à un petit problème. Voici le code qui me semblait idéal..
virtual void draw(sf::RenderTarget &target, sf::RenderStates states)
{
        target.draw(m_cShape);
        m_cShape.move(truc,bidule);
}

Or, le prototype est
virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const
Avec const à la fin! impossible donc d'appeler move :( .
Quelqu'un aurait-il une idée pour contourner ce problème? Merci  ;)

15
Général / Key repetition
« le: Novembre 01, 2013, 09:31:34 am »
Bonjour tout le monde,
Aujoud'hui je vais revenir sur les entiers battus avec un problème de "key repetition". J'aimerai qu'un seul évènement soit déclenché lorsqu'une touche est appuyée (et pas maintenue). Vous allez tout de suite me dire renderwindow::setKeyRepeatEnabled(false), oui, mais ça ne marche pas chez moi, allez savoir pourquoi.
Logiquement, il aurait fallu faire un truc du genre:
#include <SFML/Graphics.hpp>

int main(int argc,const char * argv[])
{
        srand((unsigned)time(NULL));
    sf::RenderWindow window(sf::VideoMode(1000, 600), "test");
        window.setKeyRepeatEnabled(false);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
                //Main code
afunction(event);

        window.display();
    }

    return 0;
}

Mais là aucun effet la key repetition est encore présente..

Alors j'ai aussi essayé
afunction(sf::event event)
{
if(event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Return)
 std::cout << "blop";
}

Mais la le "blop" n'apparait a aucun moment :( .

Quelqu'un aurait-il une solution?

Pages: [1] 2 Suivante »