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

Pages: [1]
1
Graphique / Re : problème avec sf::Text
« le: Avril 18, 2014, 07:17:41 pm »
dac dac merci je vais aller tester ça, j'y aurais jamais penser :D

2
Graphique / problème avec sf::Text
« le: Avril 18, 2014, 05:30:52 pm »
Bonjour,
Je suis actuellement confronté à un problème avec la classe sf::Text. Ne la connaissant pas encore, je suis allé voir sa doc pour comprendre comment elle marche, mais visiblement je n'ai pas tout saisis x)
En fait mon problème est très simple, lorsque je compile, le programme plante " ... à cessé de fonctionner". Je suis aller farfouiller un peu partout mais je ne vois pas d'ou peut venir le problème. Merci d'avance :)

Ah oui et il me suffit de mettre la ligne :  "//m_stat.setFont(font)" en commentaire pour que sa ne plante plus, sans que mon texte s'affiche.

void Game::statistic()
{
    sf::Font font;

    font.loadFromFile("arial.ttf");
    m_stats.setFont(font);
    m_stats.setString("bou !! ");
    m_stats.setCharacterSize(18);
    m_stats.setColor(sf::Color::Green);

    m_stats.setPosition(10.f, 10.f);
}


le draw est dans une fonction render :

void Game::render()
{
   
        m_window.clear();
        m_window.draw(m_player);
        m_window.draw(m_cible);
        statistic();
        m_window.draw(m_stats);
        m_window.display();
}

3
En fait, j'ai rebuild le projet en réorganisant un peu, et il y a plus aucun soucis. Désolé d'avoir déranger pour aussi peu, merci quand même :)

4
C'est surtout la ligne "velocity = velocity / length(velocity) * speed; "que je ne comprends pas.
#include "Game.hpp"

using namespace std;

const float Game::PlayerSpeed = 100.f;
const sf::Time Game::TimePerFrame = sf::seconds(1.f/60.f);

Game::Game() : m_window(sf::VideoMode(640, 480), "ILDR"), m_player()
{
    m_player.setRadius(10.f);
    m_player.setPosition(100.f, 100.f);
    m_player.setFillColor(sf::Color::Cyan);

    m_isMovingDown = false;
    m_isMovingLeft = false;
    m_isMovingRight = false;
    m_isMovingUp = false;

    m_moving = false;
}

void Game::run()
{
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;

    while(m_window.isOpen())
    {
        sf::Time deltaTime = clock.restart();

        processEvents();
        timeSinceLastUpdate += clock.restart();
        while(timeSinceLastUpdate > TimePerFrame)
        {
            timeSinceLastUpdate -= TimePerFrame;
            processEvents();
            update(TimePerFrame);
        }
        render();
    }
}

void Game::processEvents()
{
    sf::Event event;

    while(m_window.pollEvent(event))
    {
        switch(event.type)
        {
            case sf::Event::KeyPressed:
                handlePlayerInput(event.key.code, true);
                break;
            case sf::Event::KeyReleased:
                handlePlayerInput(event.key.code, false);
                break;
            case sf::Event::Closed:
                m_window.close();
                break;
            case sf::Event::MouseButtonPressed:

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

                sf::Vector2i cursor(event.mouseButton.x, event.mouseButton.y);
                target = m_window.mapPixelToCoords(cursor);
                velocity = target - m_player.getPosition();
                velocity = velocity / length(velocity) * PlayerSpeed;

                m_moving = true;
                }
    }
}

void Game::update(sf::Time elapsedTime)
{
    sf::Vector2f movement(0.f, 0.f);
    if(m_moving == false)
    {
        if(m_isMovingUp)
            movement.y -= PlayerSpeed;
        if(m_isMovingDown)
            movement.y += PlayerSpeed;
        if(m_isMovingLeft)
            movement.x -= PlayerSpeed;
        if(m_isMovingRight)
            movement.x += PlayerSpeed;

        m_player.move(movement * elapsedTime.asSeconds());
    }


    if(m_moving)
    {
            m_player.move(velocity * elapsedTime.asSeconds());

            if (length(target - m_player.getPosition()) < 5)
                m_moving = false;
    }
}

void Game::render()
{
    m_window.clear();
    m_window.draw(m_player);
    m_window.display();
}

void Game::handlePlayerInput(sf::Keyboard::Key key, bool isPressed)
{
    if(key == sf::Keyboard::Z)
        m_isMovingUp = isPressed;
    else if(key == sf::Keyboard::S)
        m_isMovingDown = isPressed;
    else if(key == sf::Keyboard::Q)
        m_isMovingLeft = isPressed;
    else if(key == sf::Keyboard::D)
        m_isMovingRight = isPressed;
}

float Game::length(sf::Vector2f v)
{
    return sqrt(v.x * v.x + v.y + v.y);
}
 

5
Salut,
Ce que je voudrais savoir, enfin ce à quoi je réfléchis, c'est comment faire pour que "shape" bouge tout le temps à la même vitesse, et non ne mette à chaque fois environ deux secondes pour passer à ,'importe quel point de l'écran.
En réfléchissant je me suis demander si je pouvais passer par un vecteur d'angle 45° et d'adapter les mouvements qui ne seront plus en ligne droite (quand x ou y sera égale à x ou y de la cible) mais j'ai un peu de mal à mettre ne place la fonction,
Merci d'avoir répondu aussi vite je n'avais pas vu x)

6
Bonjour,
Donc moi aussi j'ai besoin de déplacer un sprite avec la souris. En fait, je voudrais un peu modifier votre fonction, Laurent, mais j'ai juste besoin d'une petite explication, par rapport au vecteur vélocity et à quoi il sert.
Merci d'avance :)

Pages: [1]
anything