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

Pages: [1]
1
Fenêtrage / Clignotement avec une RenderTexture
« le: Octobre 13, 2013, 12:14:47 pm »
Bonjour,
J'ai un problème d'affichage en plein écran, quand je cree une RenderTexture sans même l'afficher, l’écran clignote en noir deux fois très rapidement. J'ai découvert ce problème il y a quelques jours et je n'arrive pas a le régler, et c'est gênant comme je crée assez souvent des RenderTextures dans mon jeu pour les shaders.
Je suis passé a la sfml 2.1 au cas ou, mais ça n'a rien changé...

J'ai donc ecrit un programme minimal qui recrée le bug, il affiche une fenêtre orange en plein écran et recrée une RenderTexture quand on clique dessus. Il y a bien le clignotement qui apparaît comme dans mon jeu. Voici le code:
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode::getFullscreenModes()[0], "Blink...", sf::Style::Fullscreen);
    sf::RenderTexture *t = new sf::RenderTexture();
    t->create(200, 200);

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

        if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
            delete t;
            t = new sf::RenderTexture();
            t->create(200, 200);
        }

        window.clear(sf::Color(255, 100, 30));
        window.display();
    }

    delete t;
    return 0;
}
 

Pour info, j'ai deux écrans et le deuxième aussi clignote en même temps que le premier. Et le clignotement n’apparaît qu'en plein écran.
Merci de votre aide! :)

2
Graphique / Re : collision avec une roue
« le: Août 19, 2013, 11:02:38 am »
Si j'ai bien compris ce que tu veux faire, le plus simple est de créer une classe "Roue" qui hérite de sf::Sprite et pour savoir sur quelle case elle est, tu utilises la méthodes getRotation().
Si par exemple ta roue a 10 cases, et que la méthode te renvoie 75 degrés, alors tu est sur la 75/(360/10)
 soit 2ème case, en partant de la case 0.

3
Il y a beaucoup plus simple. Imagine que ta vue soit tournée, il serait encore plus dur de connaitre la position du Drawable sur la fenêtre. Il suffit juste d'appeler la méthode
mapCoordsToPixel (const Vector2f &point) const
de ta fenêtre avec comme paramètre la position du Drawable, et elle va te renvoyer sa position dans la fenêtre.
(Et pour zoomer deux fois par exemple, il faut passer 0.5f comme paramètre au zoom. ;) )

4
Ah oui j'y avais pas pensé, je le fais tout de suite.

5
Graphique / [SFML 2.0 - CB - Linux] Problème avec les Textures/Sprites
« le: Octobre 28, 2012, 05:55:21 pm »
Edit: J'ai trouvé le problème, ça n'a rien à voir en fait, désolé d'avoir posté pour rien :/


Bonjour tout le monde,

J'ai compilé SFML2.0 pour linux avec Code::Blocks, tout fonctionne parfaitement, sauf que j'ai un problème d'affichage de sprites quand j'essaie avec un projet que j'avais commencé sur windows...
Voilà une image:





Comme vous pouvez le remarquer, le tile de terre devient un tile vide sur son coin haut-droite, et c'est vraiment bizarre...
Voici le méthode qui affiche le niveau, en fonction de la camera et de la fenêtre de rendu pour convertir les coordonnées et n'afficher que la partie vue par la caméra:
void Level::Draw(sf::RenderWindow& window, sf::View& view)
{
    sf::Vector2f screenTLCorner = window.convertCoords(sf::Vector2i(0, 0));
    sf::Vector2f screenBRCorner = window.convertCoords(sf::Vector2i(window.getSize()));

    for(int i=screenTLCorner.x / _tileSize; i<screenBRCorner.x / _tileSize; i++)
    {
        for(int j=screenTLCorner.y / _tileSize ; j<screenBRCorner.y / _tileSize ; j++)
        {
            if(IsOnMap(i, j))
            {
                _tileset.setPosition(sf::Vector2f(i*_tileSize, j*_tileSize));
                _tileset.setTextureRect(sf::IntRect(0, _map[i][j]*_tileSize, _tileSize, _tileSize));
                window.draw(_tileset);
            }
        }
    }
}
 

Voilà, ce qui est étrange, c'est que ça ne me fait pas ça sous Windows, et tant que j'y suis, quand la vue se déplace, des traits bleus apparaissent de temps en temps pendant quelques millisecondes, et ça c'est pareil sous Windows, peut être que ça vient de mes drivers...

Après un zoom, on dirait que ce n'est pas appliqué directement sur la Texture/Sprite puisque le dégradé est lisse alors que la texture fait 8*8.
Voilà une capture:

Désolé pour la taille des images, je n'ai pas trouvé de balise spoiler :/

Merci pour votre aide :)

Pages: [1]