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

Pages: [1]
1
Système / Re : Du mal avec les threads
« le: Juin 25, 2014, 08:46:52 am »
Là je comprend ;) merci beaucoup. Donc comme ça, je n'ai pas besoin de sf::sleep

Et
m_shape.rotate(100 * m_deltaTime.asSeconds());
c'est 100 degrés par seconde

2
Système / Re : Du mal avec les threads
« le: Juin 25, 2014, 08:19:21 am »
EDIT : J'ai trouvé!

Ce code fonctionne.. il est beau à mes yeux mais je sais pas si je fait quelque chose de mal
#ifndef GAME_HPP
#define GAME_HPP

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

class Game {
private:
        sf::RenderWindow m_window;

        sf::Clock m_clock;
        sf::Time m_deltaTime;

        sf::RectangleShape m_shape;
        float m_angle;
public:
        Game() {
                sf::ContextSettings contextSettings;
                contextSettings.antialiasingLevel = 8;
               
                m_window.create(sf::VideoMode(800,600,32), "thread", sf::Style::Close, contextSettings);
                m_window.setFramerateLimit(60.f);
                m_window.setActive(false);
               
                m_shape.setSize(sf::Vector2f(100.f,100.f));
                m_shape.setFillColor(sf::Color::Red);
                m_shape.setOrigin(50.f,50.f);
                m_shape.setPosition(400,300);
               
                m_angle = 0.f;
               
                sf::Thread updateThread(&Game::update, this);
                updateThread.launch();
               
                while (m_window.isOpen()) {
                        sf::Event event;
                        while (m_window.pollEvent(event)) {
                                if (event.type == sf::Event::Closed) m_window.close();
                        }
                }
        }
       
        void update() {
                while (m_window.isOpen()) {
                        m_angle += 2;
                        m_shape.setRotation(m_angle);
                       
                        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) m_shape.move(-2,0);
                        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) m_shape.move(2,0);
                       
                        render();
                        sf::sleep(sf::seconds(1.f/60.f));
                }
        }
       
        void render() {
                m_window.clear();
               
                m_window.draw(m_shape);
               
                m_window.display();
        }
};

#endif // GAME_HPP
 

3
Système / Du mal avec les threads
« le: Juin 25, 2014, 06:41:34 am »
Salut j'essaie de faire fonctionner une méthode "update" dans un thread.

Je ne sais pas comment m'y prendre.

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

#include "Game.hpp"

struct Params {
        Game g;
        sf::RenderWindow *win;
};

int main(void) {
        sf::RenderWindow window(sf::VideoMode(800,600), ".");
        window.setFramerateLimit(60.f);

        Game game;

        sf::Thread thread(&Game::update, &game);
        thread.launch();

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

                window.clear();

                game.render(window);

                window.display();
        }

        thread.terminate();
        thread.wait();
        return 0;
}
 

Game.hpp
#ifndef GAME_HPP
#define GAME_HPP

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

class Game {
private:
        sf::RectangleShape m_shape;
        float angle = 0.f;
public:
       Game() {
                m_shape.setSize(sf::Vector2f(100.f,100.f));
                m_shape.setFillColor(sf::Color::Red);
                m_shape.setOrigin(50.f,50.f);
                m_shape.setPosition(400,300);
       }

       void update() {
        while (true) {
                        std::cout << "Update thread!\n";
                        m_shape.setRotation(angle++);
        }
       }

       void render(sf::RenderTarget &window) {
        window.draw(m_shape);
       }
};

#endif // GAME_HPP
 

En fait ça ne fonctionne pas du tout.. Au lieu d'avoir "while (true)" je devrais avoir "while(window->isOpen())" ou quelque chose du genre.. Je ne sais pas comment.

4
Graphique / Collision avec intersects
« le: Juin 20, 2014, 08:52:30 pm »
Salut à tous!

Je n'arrive pas à bien gérer les collisions dans mon programme. J'ai un personnage que je déplace avec la souris, et j'ai un autre carré qui a une position fixe.

J'ai réussi à gérer les collision pour les côté droit et gauche du personnage, mais quand j'essaie de gérer celles du haut et du bas, mon programme prend quand même les collisions de gauche et de droite en compte.. C'est dur à expliquer pour un débutant comme moi alors j'ai fait une petite vidéo très simple :

http://videobam.com/JnqjK

Et voici mon code source :

void Player::update(sf::Vector2i mousePosition, Level *level) {
        // Ma class Player hérite de sf::RectangleShape
        sf::Vector2f position = getPosition();
        m_delta.x = mousePosition.x - position.x;
        m_delta.y = mousePosition.y - position.y;
       
        // On déplace le personnage vers la souris
        move(m_delta.x * m_playerSpeed, m_delta.y * m_playerSpeed);
       
        // Rectangle du personnage
        sf::FloatRect playerRect = getGlobalBounds();
       
        // Rectangle temporaire avant d'avoir toutes les cases du niveau à gérer (pour tester avec une seule case)
        sf::FloatRect levelTemp;
        levelTemp.top = 10 * CELL_SIZE;
        levelTemp.left = 10 * CELL_SIZE;
        levelTemp.width = levelTemp.height = CELL_SIZE;
       
        // Rectangle d'intersection
        sf::FloatRect intersection;
       
        if (playerRect.intersects(levelTemp, intersection)) {
                if (playerRect.left < levelTemp.left + CELL_SIZE &&
                    playerRect.left + CELL_SIZE > levelTemp.left + CELL_SIZE) {
                        move(intersection.width, 0);
                }
                else if (playerRect.left + CELL_SIZE > levelTemp.left &&
                             playerRect.left < levelTemp.left) {
                        move(-intersection.width, 0);
                }
                else if (playerRect.top < levelTemp.top + CELL_SIZE &&
                             playerRect.top + CELL_SIZE > levelTemp.top + CELL_SIZE) {
                        move(0, intersection.height);
                }
        }
}
 

J'espère que vous pouvez m'aider. Ça fait des heures que je tente de trouver une solution.. :S
Merci d'avance! à+

Pages: [1]