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

Pages: [1]
1
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.

2
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]
anything