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 - cybolavie

Pages: [1]
1
Général / SFML et Solaris ?
« le: Mai 21, 2013, 10:53:08 am »
Bonjour,

dans le cadre d'une reprise d'étude, j'aimerais centraliser mon travail autour d'un seul OS. J'ai un projet en cours sur SFML et j'aimerais pouvoir le continuer et le compiler sous Solaris Studio, est ce possible? Merci.

2
Graphique / problème d'optimisation, de fonction clock et de coordonnées.
« le: Décembre 14, 2012, 07:54:28 pm »
Bonsoir,

je me permet de passer sur ce forum, vis à vis d'un code pour un jeux en 2D, j'obtiens des coordonnées délirantes, j'ai des pertes, la fonction clock.restart() fait baisser considérablement les performances, bref le code me semble pourtant correct.

J'ai du louper un épisode, j'ai installé la SFML 2.0, d'ou vient ces bugs??

#include <SFML/Graphics.hpp>

#include <iostream>

 

#define WND_WIDTH 1024

#define WND_HEIGHT 768

#define GRID_TILES 12

 

const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2);

 

 

int main(int argc, char** argv)

 

{              

               

                sf::Clock clock;

 

                sf::RenderWindow wnd(sf::VideoMode(WND_WIDTH, WND_HEIGHT), "Chicken Run!");

               

        // Initialise des variables qui seront utilisées dans la boucle

 

        sf::Vector2u wndSize(0, 0); // Au départ on met 0,0 afin de provoquer la création de la texture

                sf::Texture texBackgroundGrid;

                sf::CircleShape circle;

                sf::Rect<int> scoreArea;

                sf::Rect<int> gameArea;

                sf::Rect<int> gridArea;

                sf::Sprite grid;

               

                float gridSide;

                float mx = 0;

                float my = 0;

                float eq = 0;

               

                int pixel = 90;

 

                while(wnd.isOpen())

 

        {              

                               

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

 

                                sf::Event evt;

 

                while(wnd.pollEvent(evt))

 

                {

 

                        if(evt.type == sf::Event::Closed)

 

                                wnd.close();

 

                }

 

 

                                wnd.clear(); // Efface la fenêtre

 

 

                                // Si les dimensions de la fenêtre ont changés, alors on recalcule tout

 

                sf::Vector2u wndCurrentSize = wnd.getSize();

 

                if(wndCurrentSize != wndSize)

 

                {

 

                        wndSize = wndCurrentSize;

 

                        scoreArea = sf::Rect<int>(0, 0, wndSize.x * 0.3, wndSize.y); // Rectangle du panneau des scores

 

                        gameArea = sf::Rect<int>(scoreArea.width, 0, wndSize.x - scoreArea.width, wndSize.y); // Rectangle de la fenêtre moins le panneau des scores

 

                        gridSide = std::min(gameArea.width, gameArea.height) * 0.8; // Côté de la grille = 80% du minimum entre la hauteur et la largeur dispo.

 

                        gridArea = sf::Rect<int>(gameArea.left + ((gameArea.width - gridSide) / 2), gameArea.top + ((gameArea.height - gridSide) / 2), gridSide, gridSide);

 

                        texBackgroundGrid = BuildBackgroundGrid(gridSide, sf::Color::Blue, sf::Color::White);

 

                        grid = sf::Sprite(texBackgroundGrid);

 

                        grid.setPosition(gridArea.left, gridArea.top);

 

                                }

 

                                float tile = gridSide / GRID_TILES;

                               

                                // Affiche la grille a la bonne position

 

                                wnd.draw(grid);

 

                                // Dessine le cercle

                               

                                sf::CircleShape circle;

                                circle.setRadius(tile/2);

                                circle.setFillColor(sf::Color::Red);

                               

                                // déplacement du pion

                               

                                //////////////////////////////////

                                //////////////////////////////////

 

                                // il se déplace une seule fois, avec un décallage depuis la coordonnée d'origine. plus pixel est grand et plus cet écart est conséquent

 

                                /*my += (clock.getElapsedTime().asMicroseconds() * pixel) / 1000000;

                                clock.restart();*/


 

                               

 

                                ////////////////////////////////////

 

                                // Dans ce deuxième cas, il se déplace constamment, en attendant de faire le clock.restart()

 

                                my = (clock.getElapsedTime().asMilliseconds() * pixel) / 1000;

                                //clock.restart();*/

 

                                if ( my > (gridArea.height - tile) ) { my = 0; clock.restart(); }

 

                                circle.setPosition(gridArea.left + mx, gridArea.top + my);

                               

                                wnd.draw(circle); // Affiche le déplacement du Pion

 

                                wnd.display(); // Dessine la fenêtre

 

 

                               

        }

 

        return 0;

               

}

 

 

       

const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2)

 

{              

           

                // Création d'une texture aux dimensions souhaités

 

        sf::Texture text;

                sf::RenderTexture t;

       

                t.create(size, size);

        t.clear(color1);

        t.resetGLStates();

 

        // Création d'un rectangle pour dessiner les tuiles

 

        float tileSide = size / GRID_TILES;

        sf::RectangleShape tile(sf::Vector2f(tileSide, tileSide));

       

                tile.setFillColor(color2);

        tile.setOutlineColor(sf::Color::Black);

        tile.setOutlineThickness(1);

 

                               

                int count = 0;

 

        for(int i = 0; i < GRID_TILES; i++)

 

        {

 

                for(int j = 0; j < GRID_TILES; j++)

 

                {

 

                        if(count & 1)

 

                        {

 

                                tile.setPosition(i * tileSide, j * tileSide);

                                                               

                                                                t.draw(tile);

                                                               

                        }

 

                                               

                                                count++;

 

                }

 

                count++;

 

        }

 

               

                t.display();

 

        text = sf::Texture(t.getTexture());

 

        return text;

 

}

Merci bien.  :)

Pages: [1]
anything