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 - 2ant

Pages: [1]
1
Général / Re : Besoin d'aide déplacement isométrique
« le: Mars 15, 2015, 02:21:53 pm »
Merci pour tes explications mais j'ai pas compris "norme" ;D

Qu'est ce qui est utile/inutile dans ce que j'ai mis comme idées ?

J'ai enlevé tout ce qui était pas utile dans mon code puis j'ai essayé d'intégré ce que tu as mis.
J'ai eu des erreurs,j'en ai résolues mais il m'en reste 2.

Code :

#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

int loading ( 1 );
int largeurfond = 0;

int main()
{
    sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML Test",sf::Style::Close);

    window.setVerticalSyncEnabled(true);

    sf::View view(sf::FloatRect(0, 0, 640, 360));

    sf::Color alpha(250,100,250);
    sf::Color fond (128,225,255);

        sf::Texture background;
            if (!background.loadFromFile("test.png"))
            return -1;
        sf::Sprite back;
            back.setTexture(background);
            largeurfond = background.getSize().x;

        sf::Texture splashscreen;
            if (!splashscreen.loadFromFile("Intro.png"))
            return -1;
        sf::Sprite intro;
            intro.setTexture(splashscreen);

        sf::Image mage;
            if (!mage.loadFromFile("mage.png"))
            return -1;
            mage.createMaskFromColor(alpha);
        sf::Texture maget;
            if (!maget.loadFromImage(mage,sf::IntRect(0, 0, 64, 64)))
            return -1;
        sf::Sprite spritemage;
            spritemage.setTexture(maget);
            spritemage.setPosition(sf::Vector2f(480, 160));


    sf::Clock clock;
    sf::Clock clock2;


    while (window.isOpen())
    {


        if( loading == 1 )//image d'intro
        {
            sf::Time tt = sf::seconds(5.0);
            sf::Time elapsed = clock.getElapsedTime();

            window.draw(intro);
            window.display();

            if (elapsed >= tt)
                    {
                        loading = 0;
                        clock.restart();
                    }
        }

        if( loading == 0 )//démarrage de la partie jeu
        {


            window.setView(view);

            sf::Vector2i position = sf::Mouse::getPosition(window);//position de la souris dans la fenêtre

            sf::Vector2f worldPos = window.mapPixelToCoords(position);//position de la souris dans le monde

            string title ( "SFML Test   ");

            std::string posx = std::to_string ( (int)position.x );
            std::string posy = std::to_string ( (int)position.y );

            std::string worldPosx = std::to_string ( (int)worldPos.x );
            std::string worldPosy = std::to_string ( (int)worldPos.y );

            float mousemapx = ( worldPos.x - 320 );
            float mousemapy = worldPos.y;

            float tilemx = ((mousemapy/32) + (mousemapx/64));
            float tilemy = ((mousemapy/32) - (mousemapx/64));

            int tilecx = (int)floor (tilemx );//case ou est la souris
            int tilecy = (int)floor (tilemy );//case ou est la souris

            std::string tilex = std::to_string ( tilecx );
            std::string tiley = std::to_string ( tilecy );

            int spriteox =  (320 + (( tilecx - tilecy )*(64/2))) -32;
            int spriteoy = ((( tilecx + tilecy ) * (32/2))) -32;

            std::string spriteorix = std::to_string ( spriteox );
            std::string spriteoriy = std::to_string ( spriteoy );



            title += "Pos Window ";
            title += posx;
            title += " ";
            title += posy;
            title += "    ";
            title += "Pos World ";
            title += worldPosx;
            title += " ";
            title += worldPosy;
            title += "    ";
            title += "Tile ";
            title += tiley;
            title += ":";
            title += tilex;
            title += "    ";
            title += "Spriteorigin ";
            title += spriteorix;
            title += ":";
            title += spriteoriy;
            window.setTitle(title);

            int vitesse = 100;

            sf::Vector2f spritepos (spriteox,spriteoy);//position d'affichage de sprite pour la case ou est la souris

            sf::Vector2f posmage = spritemage.getPosition();

            float longueur = sqrt ( pow ( (spritepos.x - posmage.x),2 ) + ( pow( (spritepos.y - posmage.y ),2 ) ) );

            sf::Time elapsed2 = clock2.getElapsedTime();

            sf::Vector2f direction = spritepos - posmage;

            sf::Vector2f direction = direction / longueur;

            sf::Vector2f deplacement = direction * vitesse * elapsed2.asSeconds();

            sf::Event event;
            while (window.pollEvent(event))
            {
                switch (event.type)
                {
                    // window closed
                    case sf::Event::Closed:
                        window.close();
                        break;

                    // key pressed
                    case sf::Event::KeyPressed:
                        {
                            if (event.key.code == sf::Keyboard::S)
                                {
                                    view.move(0, -32);
                                }
                            else if (event.key.code == sf::Keyboard::X)
                                {
                                    view.move(0, 32);
                                }
                            else if (event.key.code == sf::Keyboard::W)
                                {
                                    view.move(-64, 0);
                                }
                            else if (event.key.code == sf::Keyboard::C)
                                {
                                    view.move(64, 0);
                                }
                        }
                        break;

                    case sf::Event::MouseButtonPressed:
                        {
                            if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
                                {
                                    spritemage.move(deplacement);
                                    clock2.restart();
                                }
                        }
                        break;

                default:
                break;
                }
            }

        window.setView(view);
        window.clear(fond);
        window.draw(back);
        window.draw(spritemage);
    }
    }

    return 0;
}
 

Erreurs :



Je comprend les 2 messages d'erreurs mais je vois pas comment les résoudre.

J'ai encore besoin d'aide.

Je m'excuse mais j'ai vraiment du mal aujourd'hui, j'ai l'impression que mon cerveau est resté au lit.




2
Général / Besoin d'aide déplacement isométrique
« le: Mars 14, 2015, 06:22:51 pm »
Bonjour je suis en train d'essayer de faire un rpg en 2d isométrique et je ne sais pas comment faire pour le déplacement d'un personnage.

Mon programme de test :



1:position du curseur dans la fenêtre
2:position du curseur dans le "monde"
3:"case" ou est le curseur
4:position d'affichage du sprite sur la case ou est le curseur

Ce que j'aimerais pouvoir faire est un déplacement simple:

- l'utilisateur clique sur une case
- le mage se délace en direction de spriteo à une vitesse donnée
-on continue le déplacement tant que la distance parcourue (trajet) est inférieure à la lougueur du déplacement ou tant que la position du sprite n'est pas le point d'arrivée

Le code :

#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

int loading ( 1 );
int largeurfond = 0;

int main()
{
    sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML Test",sf::Style::Close);

    window.setVerticalSyncEnabled(true);

    sf::Font font;
        if (!font.loadFromFile("ff.ttf"))
        {
            // error...
        }
        sf::Text text;
        sf::Text text1;
        sf::Text text2;

        text.setFont(font);
        text.setString("Ligne 1");
        text.setCharacterSize(48);
        text.setColor(sf::Color::White);
        text.setPosition(sf::Vector2f(140, 588));

        text1.setFont(font);
        text1.setString("Ligne 2");
        text1.setCharacterSize(48);
        text1.setColor(sf::Color::White);
        text1.setPosition(sf::Vector2f(140, 618));

        text2.setFont(font);
        text2.setString("Ligne 3");
        text2.setCharacterSize(48);
        text2.setColor(sf::Color::White);
        text2.setPosition(sf::Vector2f(140, 650));

    sf::View view(sf::FloatRect(0, 0, 640, 360));

    sf::Color alpha(250,100,250);
    sf::Color fond (128,225,255);

        sf::Texture background;
            if (!background.loadFromFile("test.png"))
            return -1;
        sf::Sprite back;
            back.setTexture(background);
            largeurfond = background.getSize().x;

        sf::Texture splashscreen;
            if (!splashscreen.loadFromFile("Intro.png"))
            return -1;
        sf::Sprite intro;
            intro.setTexture(splashscreen);

        sf::Image mage;
            if (!mage.loadFromFile("mage.png"))
            return -1;
            mage.createMaskFromColor(alpha);
        sf::Texture maget;
            if (!maget.loadFromImage(mage,sf::IntRect(0, 0, 64, 64)))
            return -1;
        sf::Sprite spritemage;
            spritemage.setTexture(maget);
            spritemage.setPosition(sf::Vector2f(480, 160));

        sf::Image textbox;
            if (!textbox.loadFromFile("chatboxx.png"))
            return -1;
            textbox.createMaskFromColor(alpha);
        sf::Texture boxtex;
            if (!boxtex.loadFromImage(textbox,sf::IntRect(0, 0, 1280, 720)))
            return -1;
        sf::Sprite textbo;
            textbo.setTexture(boxtex);
            textbo.setPosition(sf::Vector2f(0,480));



    sf::Clock clock;
    sf::Clock clock2;


    while (window.isOpen())
    {


        if( loading == 1 )
        {
            sf::Time tt = sf::seconds(5.0);
            sf::Time elapsed = clock.getElapsedTime();

            window.draw(intro);
            window.display();

            if (elapsed >= tt)
                    {
                        loading = 0;
                        clock.restart();
                    }
        }

        if( loading == 0 )
        {
            window.setView(view);

            sf::Vector2i position = sf::Mouse::getPosition(window);

            sf::Vector2f worldPos = window.mapPixelToCoords(position);

            string title ( "SFML Test   ");

            std::string posx = std::to_string ( (int)position.x );
            std::string posy = std::to_string ( (int)position.y );

            std::string worldPosx = std::to_string ( (int)worldPos.x );
            std::string worldPosy = std::to_string ( (int)worldPos.y );

            float mousemapx = ( worldPos.x - 320 );
            float mousemapy = worldPos.y;

            float tilemx = ((mousemapy/32) + (mousemapx/64));
            float tilemy = ((mousemapy/32) - (mousemapx/64));

            int tilecx = (int)floor (tilemx );
            int tilecy = (int)floor (tilemy );

            std::string tilex = std::to_string ( tilecx );
            std::string tiley = std::to_string ( tilecy );

            int spriteox =  (320 + (( tilecx - tilecy )*(64/2))) -32;
            int spriteoy = ((( tilecx + tilecy ) * (32/2))) -32;

            std::string spriteorix = std::to_string ( spriteox );
            std::string spriteoriy = std::to_string ( spriteoy );

            sf::Vector2f spriteo (spriteox,spriteoy);

            title += "Pos Window ";
            title += posx;
            title += " ";
            title += posy;
            title += "    ";
            title += "Pos World ";
            title += worldPosx;
            title += " ";
            title += worldPosy;
            title += "    ";
            title += "Tile ";
            title += tiley;
            title += ":";
            title += tilex;
            title += "    ";
            title += "Spriteorigin ";
            title += spriteorix;
            title += ":";
            title += spriteoriy;


            window.setTitle(title);


            sf::Event event;
            while (window.pollEvent(event))
            {
                switch (event.type)
                {
                    // window closed
                    case sf::Event::Closed:
                        window.close();
                        break;

                    // key pressed
                    case sf::Event::KeyPressed:
                        {
                            if (event.key.code == sf::Keyboard::S)
                                {
                                    view.move(0, -32);
                                }
                            else if (event.key.code == sf::Keyboard::X)
                                {
                                    view.move(0, 32);
                                }
                            else if (event.key.code == sf::Keyboard::W)
                                {
                                    view.move(-64, 0);
                                }
                            else if (event.key.code == sf::Keyboard::C)
                                {
                                    view.move(64, 0);
                                }
                        }
                        break;

                    case sf::Event::MouseButtonPressed:
                        {
                            if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
                                {

                                }
                        }
                        break;
                    default:
                        break;
                }


        }

        window.setView(view);


        window.clear(fond);
        window.draw(back);
        window.draw(spritemage);

        window.setView(window.getDefaultView());

        window.draw(textbo);
        window.draw(text);
        window.draw(text1);
        window.draw(text2);

        window.display();
    }
    }

    return 0;
}
 

Comme idées pour l'instant j'ai ça :

Point de départ : coordonnés du mage
sf::Vector2f posmage = spritemage.getposition();
sf::Vector2f depart = posmage;//appellé une seule fois
Point d'arrivée : coordonnées correspondant à la case ou j'ai cliqué
sf::Vector2f spriteo (spriteox,spriteoy);
Trajet parcouru :
float longueur = sqrt (pow((spritox-posmage.x),2)+(pow((spritoy-posmage.y),2));
Longueur du déplacement :
float trajet = sqrt (pow((spritox-depart.x),2)+(pow((spritoy-depart.y),2));//appellé une seule fois
Variable qui me servira plus tard à modifier la vitesse :
int vitesse = 100;

Je suis pas 100%sur de ce que j'ai. Je sais que j'aurais besoin d'utiliser le temps mais je ne sais pas comment faire.

Est ce que quelqu'un peut m'aider à trouvé ( et comprendre ) la solution ou m'orienter vers un tuto pour le même problème?

3
Graphique / Re : Animation simple
« le: Septembre 03, 2014, 10:42:05 am »
Pour l'instant j'utilise le main pour tester comment faire ce dont j'ai besoin le plus simplement possible. Lorsque j'aurais tous les éléments nécessaires à mon jeu je créerais des classes.

4
Graphique / Re : Animation simple
« le: Septembre 01, 2014, 05:40:57 pm »
Merci Point G  :D

J'ai déplacer clock , corrigé mes appels de textures et remis tout en ordre.

Je poste la solution avec des commentaires pour ceux que ça peux aider.

#include <SFML/Graphics.hpp>

using namespace sf;


int main()
{
    sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML works!");// Crée une fençetre de 1280 par 720 en mode 32 bits nommée "SFML works!"

    window.setVerticalSyncEnabled(true);// Active la synchronisation verticale

    sf::Color alpha(250,100,250);//Crée une couleur ( rose )
    sf::Color fond (128,225,255);//Crée une couleur ( bleu clair )

    sf::Texture background;//Crée une texture nommée background
        if (!background.loadFromFile("background.png"))//A partir du fichier background.png
        return -1;
    sf::Sprite back;//Crée un sprite nommé back
        back.setTexture(background);//Applique la texture backgroung sur le sprite back

   
    sf::Image sniper1;//Crée une image nommée sniper1
        if (!sniper1.loadFromFile("testamod.png"))//A partir du fichier testamod.png
        return -1;
        sniper1.createMaskFromColor(alpha);//Rend la couleur alpha ( rose ) transparente

    sf::Texture snip1;//Crée une texture nommée snip1
        if (!snip1.create(64, 64))//snip1 est crée vide et de taille 64x64
        return -1;

    sf::Sprite spritesnip1;//Crée un sprite nommé spritesnip1
        spritesnip1.setTexture(snip1);//Applique la texture snip1 sur le sprite spritesnip1
        spritesnip1.setPosition(sf::Vector2f(320, 80));//Définis la position du sprite spritesnip1 à 320 de X et 80 d'Y

    sf::Clock clock;//Démarre un chrono

    while (window.isOpen())//Boucle du programme
    {
        sf::Event event;//Gestionnaire d'évênement
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

                    sf::Time t1 = sf::seconds(1.0);//Une seconde
                    sf::Time t2 = sf::seconds(2.0);//Deux secondes
                    sf::Time t3 = sf::seconds(3.0);//Trois secondes
                    sf::Time t4 = sf::seconds(4.0);//Quatre secondes

                    sf::Time elapsed1 = clock.getElapsedTime();//Inscris dans elapsed1 le temps écoulé depuis le démarrage du chrono

                    if (elapsed1 <= t1)//Si temps écoulé est inférieur ou égal à une seconde
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(128, 64, 64, 64));//Rempis la texture snip1 par un morceau de 64x64 pixels situé à 128 de X et 64 d'Y de l'image sniper1
                    }

                    if (elapsed1 > t1 && elapsed1 < t2)//Si temps écoulé est compris entre 1 et 2 secondes
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(192, 0, 64, 64));//Change la texture snip1 par un morceau de 64x64 pixels situé à 192 de X et 0 d'Y de l'image sniper1
                    }

                    if (elapsed1 > t2 && elapsed1 < t3)//Si temps écoulé est compris entre 2 et 3 secondes
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(192, 64, 64, 64));//Change la texture snip1 par un morceau de 64x64 pixels situé à 192 de X et 64 d'Y de l'image sniper1
                    }

                    if (elapsed1 > t3 && elapsed1 < t4)//Si temps écoulé est compris entre 3 et 4 secondes
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(192, 0, 64, 64));//Change la texture snip1 par un morceau de 64x64 pixels situé à 192 de X et 0 d'Y de l'image sniper1
                    }
                    if (elapsed1 > t4)//Si temps écoulé est supérieur à 4 secondes
                    {
                        clock.restart();Redémarre le chrono
                    }

        window.clear(fond);//Nettoie le buffer avec la couleur fond ( bleu clair )
        window.draw(back);//Dessine le sprite back
        window.draw(spritesnip1);//Dessine le sprite spritesnip1
        window.display();//Affiche le rendu
    }

    return 0;
}

 

5
Graphique / Animation simple
« le: Septembre 01, 2014, 02:35:15 pm »
Bonjour, je suis debutant en c++ et en sfml.

Je cherche à créer un T-rpg iso et pour l'instant je fais des test pour découvrir les possibilités de la sfml.

Je cherche à faire une animation simple : toute les 2 secondes un sprite change de texture.

Le sprite s'affiche bien mais ne change pas de texture.

J'aimerais de l'aide pour savoir pourquoi ce que j'ai fais ne fonctionne pas

Mon code:

#include <SFML/Graphics.hpp>

using namespace sf;

int main()
{
    sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML works!");

    window.setVerticalSyncEnabled(true);

    sf::Color alpha(250,100,250);
    sf::Color fond (128,225,255,255);

    sf::Texture background;
        if (!background.loadFromFile("background.png"))
        return -1;
    sf::Sprite back;
        back.setTexture(background);


    sf::Image sniper1;
        if (!sniper1.loadFromFile("testamod.png"))
        return -1;
        sniper1.createMaskFromColor(alpha);

    sf::Texture snip1;
        if (!snip1.loadFromImage(sniper1,sf::IntRect(128,64, 64, 64)))
        return -1;

    sf::Sprite spritesnip1;
        spritesnip1.setTexture(snip1);
        spritesnip1.setPosition(sf::Vector2f(320, 80));



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

        sf::Clock clock;
                    sf::Time t2 = sf::seconds(2.0);
                    sf::Time t4 = sf::seconds(4.0);
                    sf::Time t6 = sf::seconds(6.0);
                    sf::Time t8 = sf::seconds(8.0);

                    sf::Time elapsed1 = clock.getElapsedTime();

                    if (elapsed1 > t2 && elapsed1 < t4)
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(196,64, 64, 64));
                    }

                    if (elapsed1 > t4 && elapsed1 < t6)
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(196,128, 64, 64));
                    }

                    if (elapsed1 > t6 && elapsed1 < t8)
                    {
                        snip1.loadFromImage(sniper1,sf::IntRect(128,64, 64, 64));
                    }
                    if (elapsed1 > t8)
                    {
                        clock.restart();
                    }

        window.clear(fond);
        window.draw(back);
        window.draw(spritesnip1);
        window.display();
    }

    return 0;
}

 

Pages: [1]
anything