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

Pages: [1] 2 Suivante »
1
Graphique / Déplacement style bomberman
« le: Janvier 24, 2015, 03:55:45 pm »
Bonjour à tous,

je viens vous demandé votre aide car j'ai essayé au maximum de me débrouiller mais j'y suis pas arrivé  :-X

Je cherche à reproduire les déplacements comme dans super bomberman 2 sur SNES.

C'est à dire, que si le joueur se déplace en appuyant sur 2 touches simultanément, le joueur commence d'abord par les déplacements prévu pour pour la première touche enfoncé jusqu'a rentré en colision avec un block puis il passe la main à la seconde touche

Exemple avec

HAUT + DROITE



Et donc je ne sais pas comment réorganiser mon code pour pouvoir gérer ça...

voici l'actuel qui gére seulement 1 touche à la fois.

(click to show/hide)


Merci d'avance.

2
Général / Coder proprement un snake
« le: Septembre 07, 2014, 03:09:54 pm »
Bonjour,

je viens de reprendre la SFMLet pour me remettre en condition j'ai coder un snake vraiment basique, mais j'aimerais savoir si il est proprement coder, et si il exploite au mieux les concepts de la POO.

Merci.

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

#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 640

int main(int, char const**)
{
    sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "SFML window");

    window.setFramerateLimit(60);
    window.setKeyRepeatEnabled(false);

    Snake snake(window, 32, 32);

    while (window.isOpen())
    {
        snake.Move();

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

            snake.Update(event);

        }

        window.clear(sf::Color(0,162,255));
        snake.Draw();
        window.display();
    }

    return EXIT_SUCCESS;
}
 


#ifndef SNAKE_H_INCLUDED
#define SNAKE_H_INCLUDED

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

class Snake
{
    public:
        Snake(sf::RenderWindow &window, int sSize, int sSpeed);

        void Move();
        void Update(sf::Event &event);
        void Draw();

    private:
        sf::RenderWindow &mWindow;
        sf::Clock mClock;
        sf::CircleShape mFood;
        int mTimeToUpdate;
        int mSize;
        int mSpeed;
        bool mLeft, mRight, mUp, mDown;
        float mCurrentTime;
        std::vector<sf::RectangleShape> mSnakes;

        void CheckCollision();
        void AddCase();
        void FoodGenerator();
};

#endif // SNAKE_H_INCLUDED
 

#include "Snake.h"

using namespace std;
using namespace sf;

Snake::Snake(RenderWindow &window, int sSize, int sSpeed) : mWindow(window), mSize(sSize), mSpeed(sSpeed)
{
    mTimeToUpdate = 250; // 1/4 second
    mCurrentTime = 0.0f;
    mLeft = mUp = mDown = false;
    mRight = true;
    srand(std::time(0));
    AddCase();
    AddCase();

    mFood.setRadius(mSize / 2); // Food circle
    mFood.setFillColor(sf::Color::Green);
    FoodGenerator();
}

void Snake::FoodGenerator() // Generates the new food position
{
    int randomX = rand() % (mWindow.getSize().x / mSize);
    int randomY = rand() % (mWindow.getSize().y / mSize);

    for(unsigned int i = 0; i < mSnakes.size(); i++)
    {
        if((mSnakes[0].getPosition().x != randomX * mSize) && (mSnakes[0].getPosition().y != randomY))
        {
            mFood.setPosition(randomX * mSize, randomY * mSize);
        }
    }
}

void Snake::AddCase() // Add 1 more case
{
    sf::RectangleShape rect;
    rect.setSize(sf::Vector2f(32, 32));
    rect.setOutlineColor(sf::Color::Black);
    rect.setOutlineThickness(1.0f);

    if (mSnakes.empty())
    {
        rect.setFillColor(sf::Color::Red);
        rect.setPosition(320, 256);
    }
    else
    {
        rect.setFillColor(sf::Color::Yellow);
        rect.setPosition(mSnakes[mSnakes.size() - 1].getPosition().x - rect.getSize().x, mSnakes[mSnakes.size() - 1].getPosition().y);
    }

    mSnakes.push_back(rect);
}

void Snake::Move() // Move the snake every 250 ms and check collision
{
    if (mCurrentTime < mTimeToUpdate)
    {
        mCurrentTime += mClock.restart().asMilliseconds();
    }
    else
    {
        mCurrentTime = 0.0f;

        if (mSnakes.size() > 1)
        {
            for (unsigned int i = mSnakes.size() - 1; i > 0; i--)
            {
                mSnakes[i].setPosition(sf::Vector2f(mSnakes[i-1].getPosition().x, mSnakes[i-1].getPosition().y));
            }
        }

        if (mLeft)
        {
            mSnakes[0].move(-mSpeed, 0);
        }

        if (mRight)
        {
            mSnakes[0].move(mSpeed, 0);
        }

        if (mUp)
        {
            mSnakes[0].move(0, -mSpeed);
        }

        if (mDown)
        {
            mSnakes[0].move(0, mSpeed);
        }

        CheckCollision();
    }
}

void Snake::CheckCollision()
{
    for (unsigned int i = 2; i < mSnakes.size(); i++) // Snake's boxes
    {
        if (mSnakes[0].getPosition().x == mSnakes[i].getPosition().x
        && mSnakes[0].getPosition().y == mSnakes[i].getPosition().y)
        {
            mWindow.close();
        }
    }

    if (mSnakes[0].getPosition().x < 0 || mSnakes[0].getPosition().x + mSnakes[0].getSize().x > mWindow.getSize().x // Window collision
    || mSnakes[0].getPosition().y < 0 || mSnakes[0].getPosition().y + mSnakes[0].getSize().y > mWindow.getSize().y)
    {
        mWindow.close();
    }

    if (mSnakes[0].getPosition().x == mFood.getPosition().x // Food collision
    && mSnakes[0].getPosition().y == mFood.getPosition().y)
    {
        AddCase();
        FoodGenerator();
    }
}

void Snake::Update(Event &event) // Check key input
{
    if (event.type == sf::Event::KeyPressed)
    {
        if (event.key.code == sf::Keyboard::Left)
        {
            if(mSnakes[0].getPosition().x - mSnakes[0].getSize().x != mSnakes[1].getPosition().x)
            {
                if(!mLeft && !mRight)
                {
                    mLeft = true;
                    mRight = false;
                    mUp = false;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Right)
        {
            if(mSnakes[0].getPosition().x + mSnakes[0].getSize().x != mSnakes[1].getPosition().x)
            {
                if(!mRight && !mLeft)
                {
                    mLeft = false;
                    mRight = true;
                    mUp = false;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Up)
        {
            if(mSnakes[0].getPosition().y - mSnakes[0].getSize().x != mSnakes[1].getPosition().y)
            {
                if(!mUp && !mDown)
                {
                    mLeft = false;
                    mRight = false;
                    mUp = true;
                    mDown = false;
                }
            }
        }

        if (event.key.code == sf::Keyboard::Down)
        {
            if(mSnakes[0].getPosition().y + mSnakes[0].getSize().x != mSnakes[1].getPosition().y)
            {
                if(!mUp && !mDown)
                {
                    mLeft = false;
                    mRight = false;
                    mUp = false;
                    mDown = true;
                }
            }
        }
    }
}

void Snake::Draw()
{
    mWindow.draw(mFood);

    for (unsigned int i = 0; i < mSnakes.size(); i++)
        mWindow.draw(mSnakes[i]);
}
 

3
Général / Délai avant changement de touche
« le: Septembre 01, 2014, 03:14:24 pm »
Bonjour,

je souhaite déplacer un petit carré, j'y arrive bien sauf que lorsque je change de touche en plein déplacement, je constate une petit délai avant que mon carré se déplace à nouveau.

Voici le code :

    // Boucle
    while (window.isOpen())
    {
        sf::Time elapsedTime = clock.restart();

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

            if(!isKeyPressed || keyPressed == LEFT)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                {
                    rect.move(-RECT_SPEED*elapsedTime.asMilliseconds(), 0);
                    isKeyPressed = true;
                    keyPressed = LEFT;
                }
            }

            if(!isKeyPressed || keyPressed == RIGHT)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                {
                    rect.move(RECT_SPEED*elapsedTime.asMilliseconds(), 0);
                    isKeyPressed = true;
                    keyPressed = RIGHT;
                }
            }

            if(!isKeyPressed || keyPressed == UP)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                {
                    rect.move(0, -RECT_SPEED*elapsedTime.asMilliseconds());
                    isKeyPressed = true;
                    keyPressed = UP;
                }
            }

            if(!isKeyPressed || keyPressed == DOWN)
            {
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                {
                    rect.move(0, RECT_SPEED*elapsedTime.asMilliseconds());
                    isKeyPressed = true;
                    keyPressed = DOWN;
                }
            }

            if(event.type == sf::Event::KeyReleased)
                isKeyPressed = false;
        }

        window.clear(sf::Color(0,162,255));
        window.draw(rect);
        window.display();
    }

4
Général / Compiler SFML avec CMAKE
« le: Août 26, 2014, 04:34:23 pm »
Re-bonjour,

J'ai suivis le tutoriel pour compiler la sfml avec cmake mais pour mac os x, je trouve le tuto vraiment mal fais pour les utilisateurs de mac.

j'ai reussi à  générer les makefiles avec cmake mais une fois cette étapes passé je ne sais pas quoi faire d'autre...

Faut il compiler le projet xcode ou bien autre chôse ?

5
Général / Résolution fenetre Mac os x
« le: Août 25, 2014, 07:04:13 pm »
Bonsoir,

je viens tout juste d'installer la SFML sur mon Macbook et je viens de remarquer que lorsque j'ouvre une fenêtre celle ci est pixelisée.

Je sais pas si c'est normal mais c'est pas jolie en tout cas ^^

Merci d'avance.

6
Graphique / [Résolu] Problème du carré blanc.
« le: Septembre 05, 2013, 11:19:33 am »
Bonjour, j'ai un petit soucis avec les sf::Texture, en effet dans mon programme je veut chargé toutes mes textures depuis un fichier texte puis les stockés dans un vector seulement, quand je les affiches j'ai le "fameux carré blanc"

ou plutôt, j'ai qu'une texture sur 2 qui s'affiche.


void ListView::LoadIcons(std::string path)
{
    std::ifstream file(path.c_str());
    std::string text, line, imagePath;
    int loop = 0, tab = 0;

    if(file.is_open())
    {
        while(getline(file, line))
        {
            ...

            sf::Texture texture;
            texture.loadFromFile(imagePath);
            texture.setSmooth(false);

            mTextures.push_back(texture);

            gui::Label *label = new gui::Label(text);
            label->LoadImage(mTextures.back()); // Prend une réference
            label->SetMargins(5);


    file.close();
}


Cordialement,
cChaD

7
Graphique / Zone de texte
« le: Août 20, 2013, 01:31:03 pm »
Bonjour,

je suis en train de réaliser un widget de type "zone de texte" avec les retours à la lignes.
Seulement, j'aimerais savoir si mon texte est plus petit que ma zone à l’écran, pour la première ligne c'est assez simple je récupère le Rect.right mais quand il y a plusieurs lignes, je ne sais pas comment récuperer la longueur du rect après le '\n'


Cordialement.

8
Système / Création d'une lib dynamique/static
« le: Août 12, 2013, 09:33:36 pm »
Bonsoir,

pour ma lib je l'ai toujours créer de manière static, c'est à dire que j'obtenais un lib.a que je devais linker pour chaque projet l'utilisant, mais je voulais savoir qu'elle était l’intérêt d'utiliser des .dll ? lorsque je vois pour SFML ont dois linker les libs et surtout ne pas oublier les .dll.


Cordialement.

9
Général / Chûte de FPS
« le: Août 12, 2013, 02:14:57 pm »
Bonjour,

j'ai remarquer que le nombre de FPS dans mes programmes en SFML passés parfois de 32 à 64 en
relançant l'application plusieurs fois et en enlevant/remettant le

SetFramerateLimit(60)

Es-ce un bug ?



Merci d'avance.

10
Général / [Résolu]Problème d'update
« le: Juin 25, 2013, 03:21:29 pm »
Bonjour,

pour ma gui, j'ai besoin d'utiliser des scrollbar, afin de défiler du contenus, seulement j'ai remarqué que lorsque je place ma scrollbar à l’intérieur de ma fenêtre à scroller les éléments ne défile qu'une fois la souris lâché contrairement à quand je la place à l’extérieur ou l'update se fait "en temps réel"' c'est à dire que je peut laissé clické et bougé le slider et les widgets défile en même temps..

D'où cela peut il venir ?

    void Window::Draw()
    {
        // Scrolling
      if(scrollBar != nullptr)
            glScissor(position.x + padding.left, (EngineManager::GetInstance()->GetWindow()->getSize().y) - position.y - dimensions.height + padding.bottom , dimensions.width - padding.left - padding.right - scrollBar->GetDimensions().width - scrollBar->GetMargins().left, dimensions.height - padding.top - padding.bottom);
        else
            glScissor(position.x + padding.left, (EngineManager::GetInstance()->GetWindow()->getSize().y) - position.y - dimensions.height + padding.bottom , dimensions.width - padding.left - padding.right, dimensions.height - padding.top - padding.bottom);

        glEnable(GL_SCISSOR_TEST);

        for(unsigned int i = 0; i < widgets.size(); i++)
            widgets[i]->Draw();

        glDisable(GL_SCISSOR_TEST);
    }

    void Window::Update()
    {
         if(scrollBar != nullptr)
              widgets[i]->SetPositionY(initPos[i] - (float)scrollBar->GetValue() * (float)(contains.height - dimensions.height + padding.top + padding.bottom));
    }
 







Merci d'avance.


EDIT : C’était finalement une erreur de ma part.

11
Général / [Résolu]segfault..
« le: Juin 14, 2013, 08:54:17 pm »
Bonsoir, je viens vous demander de l'aide car j'ai un problème avec une méthode virtuel

    void Slider::SetPosition(int x, int y)
    {
        Widget::SetPosition(x, y);
        button->SetPosition(x, y - (button->GetDimensions().height / 6));
    }

j'obtiens un jolie segfault au lancement de la fenêtre, et je ne comprend absolument pas pourquoi...



Merci pour votre aide.

12
Graphique / Text Scale
« le: Avril 17, 2013, 09:00:03 pm »
Salut,

j'utilise les view dans mon programme "gui" est lorsque j'utilise une vue est que je modifie le viewport le bouton garde bien ses formes mais pas le texte, comment faire pour que le sf::Text n'apparaissent pas flou ?

merci.

13
Général / Programme qui plante avec les view
« le: Avril 06, 2013, 05:24:25 pm »
bonjour,

j'ai un soucis, je procède a des tests dans mon main pour afficher une view et lorsque je ferme la fenêtre, j'ai le message d'erreur "testlib à cesser de fonctionner"

Voici la déclaration de la vue

    sf::View view(sf::FloatRect(0, 0, 800, 600));
    view.setCenter(310, 400);
    view.setViewport(sf::FloatRect(0.08f, 0.1f, 0.61f, 0.8f));

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

            engine->HandleEvent(event);

            if(engine->Event->IsKeyPressed().space)
                view.move(0, -1);

            if(engine->Event->IsKeyReleased().bback)
                view.move(0, 1);
        }

 Le rendu
        window.clear(sf::Color::White);
        window.setView(window.getDefaultView());
        fenetre->Draw();
        scrollbar->Draw();
        window.setView(view);
        button1->Draw();
        button2->Draw();
        button3->Draw();
        window.display();


Quand j’enlève

             if(engine->Event->IsKeyPressed().space)
                view.move(0, -1);

            if(engine->Event->IsKeyReleased().bback)
                view.move(0, 1);

Sa fonctionne mais quand je le laisse et que j'enleve  à la place le viewport sa fonctionne aussi...

Merci d'avance.

14
Graphique / View pour ScrollBar
« le: Avril 06, 2013, 02:24:13 pm »
Bonjour,

je tente de faire une ScrollBar pour mes menus mais, j'aurais besoin de savoir quel est le meilleurs moyen pour scroller la parti noir avec les bouttons, j'ai beau regarder les barres de défilement des navigateurs internet et je me demandais si je devais scale() le background..

J'aimerais aussi savoir si je dois modifié ma méthode pour récupérer le rectangle englobant pour la colision.

Mouse EventEngine::MousePosition()
{
    mouse.pos = sf::Mouse::getPosition(*Win);
    return mouse;
}

Merci d'avance.


15
Général / MouseButtonReleased
« le: Avril 05, 2013, 05:09:03 pm »
Bonjour,

je code actuellement une scrollbar est j'ai besoin de savoir quand le bouton est relaché, j'ai fait ceci

    void ScrollBar::Update()
    {
        if(IsClicked())
            draged = true;

        if(IsClickedReleased())
            draged = false;

        if(draged)
        {
            unsigned int y = EngineManager::GetInstance()->Event->MouseState().pos.y;

            if(y > (unsigned)(position.y + 32) && y < (position.y + dimensions.height - 45))
                slider->SetPositionY(EngineManager::GetInstance()->Event->MouseState().pos.y - (slider->GetDimensions().height / 2));
        }
    }

mais le soucis est qu'il faut que je click encore une fois pour que sa s'arrete.

Merci d'avance

Pages: [1] 2 Suivante »