Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML2.0]Déplacement bizarre et saccadé de la vue. (réseau + sf::clock.)  (Lu 4984 fois)

0 Membres et 1 Invité sur ce sujet

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Voici le message d'erreur qu'il m'affiche :
b60c7000-b60c8000 rw-p 00008000 08:09 387        /usr/lib/i386-linux-gnu/libXrender.so.1.3.0Abandon (core dumped)
 
« Modifié: Mars 12, 2013, 10:44:43 am par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #1 le: Mars 07, 2013, 08:32:21 am »
Et ? On est censé pondre une réponse magiquement, sans aucun autre détail (carte graphique, version des drivers -- sont-ils à jour ?, version de l'OS, version de SFML, et surtout : code) ?
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #2 le: Mars 07, 2013, 10:55:08 am »
Alors :
Mes drivers sont à jour, j'ai vérifié.
OS et version : ubuntu version 12.04.
Version de la SFML : 2.0
Le débogueur m'affiche ceci :
#0 ( 0xb7fdd424 in __kernel_vsyscall() (??:??)
#1 0xb6da61df raise() (/lib/i386-linux-gnu/libc.so.6:??)
#2 0xb6da9825 abort() (/lib/i386-linux-gnu/libc.so.6:??)
#3 0xb6de339a ??() (/lib/i386-linux-gnu/libc.so.6:??)
#4 0xb6dedee2 ??() (/lib/i386-linux-gnu/libc.so.6:??)
#5 0xb701551f operator delete(void*) () (/usr/lib/i386-linux-gnu/libstdc++.so.6:??)
#6 0x80664d8 sf::Sprite::~Sprite(this=0x932db50, __in_chrg=<optimized out>) (../../../../usr/local/SFML2/include/SFML/Graphics/Sprite.hpp:47)
#7 0x8076aef ShadowTile::~ShadowTile(this=0x9281468, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/Lighting/shadowTile.cpp:56)
#8 0x8076b4f ShadowTile::~ShadowTile(this=0x9281468, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/Lighting/shadowTile.cpp:57)
#9 0x806c97f Tile::~Tile(this=0x929ffe0, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/GraphicEngine/tile.cpp:138)
#10 0x806ca37 Tile::~Tile(this=0x929ffe0, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/GraphicEngine/tile.cpp:143)
#11 0x809302b GridMap::~GridMap(this=0x873cc20, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/world/gridMap.cpp:622)
#12 0x80990e8 Map::~Map(this=0x873b0b0, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/world/map.cpp:82)
#13 0x8063e4e MyCanvas::~MyCanvas(this=0x814fe28, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/GraphicEngine/myCanvas.cpp:406)
#14 0x8063fa3 MyCanvas::~MyCanvas(this=0x814fe28, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/GraphicEngine/myCanvas.cpp:410)
#15 0xb792237c QObjectPrivate::deleteChildren() () (/usr/local/Qt-5.0.1/lib/libQt5Core.so.5:??)
#16 0xb71ff732 QWidget::~QWidget() () (/usr/local/Qt-5.0.1/lib/libQt5Widgets.so.5:??)
#17 0xb71ff9b2 QWidget::~QWidget() () (/usr/local/Qt-5.0.1/lib/libQt5Widgets.so.5:??)
#18 0xb792237c QObjectPrivate::deleteChildren() () (/usr/local/Qt-5.0.1/lib/libQt5Core.so.5:??)
#19 0xb71ff732 QWidget::~QWidget() () (/usr/local/Qt-5.0.1/lib/libQt5Widgets.so.5:??)
#20 0xb7318f4f QMainWindow::~QMainWindow() () (/usr/local/Qt-5.0.1/lib/libQt5Widgets.so.5:??)
#21 0x8068d6b MyFrame::~MyFrame(this=0xbfff5514, __in_chrg=<optimized out>) (/home/laurent/Projets-c++/Sorrok/GraphicEngine/myFrame.h:22)
#22 0x808d1e1 main(argc=1, argv=0xbffff814) (/home/laurent/Projets-c++/Sorrok/main.cpp:28)

PS : Je n'ai pas de soucis avec la SFML 1.6 donc le problème viens plutôt lorsque j'utilise des "RenderTexture", et lorsque je déplace la vue.


« Modifié: Mars 07, 2013, 10:59:29 am par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #3 le: Mars 07, 2013, 10:58:29 am »
Maintenant il manque juste le plus important, ton code ;)

Il faudrait notamment voir la définition et le destructeur des classes qui apparaissent dans la pile d'appels.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #4 le: Mars 07, 2013, 11:13:50 am »
Voici mes destructeurs :
Tile::~Tile () {

    if (shadow != NULL) {
        delete shadow;
    }
    if (wall != NULL) {
        delete wall;
    }
}
ShadowTile::~ShadowTile () {
    delete shadow;
}
 
Map::~Map () {
    delete gridMap;
}
 
GridMap::~GridMap () {
    vector<Entity*> entities = getEntities();
    for (unsigned int i = 0; i < entities.size(); i++) {
        delete entities[i];
    }
    for (unsigned int i = 0; i < casesMap.size(); i++) {
         delete casesMap[i];
    }

    for (unsigned int i = 0; i < collisionsPolygons.size(); i++) {
        delete collisionsPolygons[i];
    }
    casesMap.clear ();

    collisionsPolygons.clear();
}
 
MyCanvas::~MyCanvas () {
    delete map;
    delete lm;
    delete caracter;

}
 
Dans MyFrame par contre je n'ai pas fais de destructeur. :o

Bref je rends les ombres avec une RenderTexture et c'est là que ça bug. :/
J'ai un autre projets ou c'est exactement le même code mais avec la SFML 1.6 et là ça ne bug pas.
Et pourtant pour la RenderTexture je fais juste un appel à créate dans la méthode init, et j'affiche tout avec la méthode update :
void MyCanvas::onInit() {

    centerView = view.getCenter();
    Vector2i position = mapCoordsToPixel(Vector2f(0, 0), view);
    BoundingRectangle br (position.x, position.y, view.getSize().x, view.getSize().y);

    ambientColor.r = 255;
    ambientColor.g = 255;
    ambientColor.b = 255;
    renderTextShadows.create(view.getSize().x, view.getSize().y);
    renderTextLights.create(view.getSize().x, view.getSize().y);
    loadMap();

    map->gridMap->checkVisibleTiles(centerView);
    lm->checkVisibleLights(br);
    lm->checkVisibleSegsWalls();
    lm->checkVisibleShadows();
    loadMonsters ();

    /*if (PostFX::CanUsePostFX && effet.LoadFromFile("effets/colorize.sfx")) {
        effet.SetTexture("framebuffer", NULL);
        effet.SetParameter("color", 1.f, 1.f, 1.f);
    } else
        cout<<"Impossible d'appliquer l'effet."<<endl;*/

    setView(view);
}
 
//Méthode appelée lors de la mise à jour de l'affichage. (Raffraichissement.)
void MyCanvas::onUpdate () {
    clear();
    bool day;
    (ambientColor.r == 0 && ambientColor.g == 0 && ambientColor.b == 255) ? day = false : day = true;
    Vector2f v2 (view.getCenter().x - view.getSize().x * 0.5f, view.getCenter().y - view.getSize().y * 0.5f);
    //Rendu des ombres.

    renderTextShadows.setView(view);
    renderTextShadows.clear(Color::White);
    if (day) {

        RectangleShape rect;
        rect.setPosition(Vector2f(v2.x, v2.y));
        rect.setFillColor((Color(100, 100, 100, 128)));
        rect.setSize(Vector2f (view.getSize().x, view.getSize().y));

        vector<Shadow*> visibleShadows = lm->getAllVisibleShadows();

        for (unsigned int i = 0; i < visibleShadows.size(); i++) {
                renderTextShadows.draw(*visibleShadows[i]->getShadow());
                //draw(*visibleShadows[i]->getShadow());
        }

        renderTextShadows.draw(rect, RenderStates(BlendAdd));
        //draw(rect, RenderStates(BlendAdd));
    }

    renderTextShadows.display();

    //Rendu des lumières.
    renderTextLights.clear(ambientColor);
    if (!day) {

        vector<Light*> visibleLights = lm->getAllVisibleLights();
        for (unsigned int i = 0; i < visibleLights.size(); i++) {
            for (unsigned int j = 0; j < visibleLights[i]->getTris().size(); j++) {
            renderTextLights.draw(*visibleLights[i]->getTris()[j], RenderStates(BlendAdd));
            if (visibleLights[i]->getType() == Light::DIRECTIONNAL_LIGHT) {
                for (unsigned int j = 0; j < visibleLights[i]->getConeTris().size(); j++)
                    renderTextLights.draw(*visibleLights[i]->getConeTris()[j], RenderStates(BlendAdd));
                }
            }
        }
    }

    //Rendu de la map. (partie visible à l'écran.)
    clear();
    vector<Tile*> visiblesTiles = map->gridMap->getVisibleTiles();
    bool shadowRendered = false;
    if (caracter != NULL) {
        addDynamicTile(caracter, visiblesTiles);
    }
    vector<Monster*> monsters = map->gridMap->getVisibleMonsters();
    for (unsigned int i = 0; i < monsters.size(); i++) {
        addDynamicTile(monsters[i]->getTile(), visiblesTiles);
    }
    for (unsigned int i = 0; i < visiblesTiles.size(); i++) {
         if (visiblesTiles[i]->getZOrder() >= Tile::MIN_ENTITY_Z_ORDER && !shadowRendered && day) {
             Sprite spriteShadows (renderTextShadows.getTexture());
             spriteShadows.setPosition(v2.x, v2.y);
             draw(spriteShadows, RenderStates(BlendMultiply));
             //draw(spriteShadows, RenderStates(BlendAdd));
             shadowRendered = true;
         }
         draw(visiblesTiles[i]->getSprite());
    }
   /* if (!day)
        draw (Sprite(renderTextLights.getTexture()), RenderStates(BlendMultiply));*/

    //Gestion des évènements.
    processEvents();
    //Dessin du personnage.
    if (selectedCar->moving()) {
        Vec2f cView (centerView.x, centerView.y);
        Vec2f newPos = cView + selectedCar->getDir() * speed * clock.getElapsedTime().asSeconds();
        if ((newPos - cView).magnitude() >
            (points[currentPointIndex] - cView).magnitude())
            newPos = points[currentPointIndex];
        Vec2f diff = newPos - cView;
        view.move(diff.x, diff.y);
        setView(view);
        centerView = view.getCenter();
        caracter->getSprite().setPosition(centerView);
        map->gridMap->checkVisibleTiles(centerView);
        Vector2i position = mapCoordsToPixel(Vector2f(0, 0), view);
        BoundingRectangle br (position.x, position.y, view.getSize().x, view.getSize().y);
        lm->checkVisibleLights(br);
        //map->gridMap->checkCollisions (centerView);
        //br = BoundingRectangle (position.x - 100, position.y - 100, view.getSize().x + 100, view.getSize().y + 100);
        lm->checkVisibleShadows();
        lm->checkVisibleSegsWalls();
        Vec2f newDir = points[currentPointIndex] - newPos;
        newDir = newDir.normalize();

        if (selectedCar->getDir().isOpposite(newDir)
            || points[currentPointIndex] == newPos) {
            currentPointIndex++;
            if (currentPointIndex >= points.size()) {
                selectedCar->setMoving(false);
                Vec2f nullDir(0, 0);
                selectedCar->setDir(nullDir);
            } else {
                newDir = points[currentPointIndex] - cView;
                newDir = newDir.normalize();
                selectedCar->setDir(newDir);
            }
        }
    }

    //Dessin des monstres.
    clock.restart();
    //Draw(effet);
}
 
Et ça plante juste quand j'appuie sur une touche du clavier :
}
void MyCanvas::processEvents () {
    Event event;
    Vec2f center = caracter->getRelCoords();
    Vec2f size (caracter->getSize().x, caracter->getSize().y);
    Vec2f pos (center.x - size.x  * 0.5f, center.y - size.y * 0.5f);
    float elTime = clock.getElapsedTime().asSeconds();
    bool keyboardMove = false;
    while (pollEvent(event)) {
        if (Keyboard::isKeyPressed(Keyboard::Right)) {

            Network::sendMessage("MOVE*"+conversionIntString(pos.x + speed * elTime)+"#"+conversionIntString(pos.y)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameX(speed * elTime);
                view.move(speed * elTime, 0);
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Left)) {
            Network::sendMessage("MOVE*"+conversionIntString(pos.x - speed * elTime)+"#"+conversionIntString(pos.y)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameX(-speed * elTime);
                view.move(-speed * elTime, 0);
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Up)) {
            Network::sendMessage("MOVE*"+conversionIntString(pos.x)+"#"+conversionIntString(pos.y - 25)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameY(-speed * elTime);
                view.move(0, -speed * elTime);
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Down)) {
            Network::sendMessage("MOVE*"+conversionIntString(pos.x)+"#"+conversionIntString(pos.y + speed * elTime)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameY(speed * elTime);
                view.move(0, speed * elTime);
                keyboardMove = true;

            }
        } else if (Mouse::isButtonPressed(Mouse::Left)) {

            selectedCar->setMoving(false);
            string startPos = conversionIntString(view.getCenter().x)+"#"+conversionIntString(view.getCenter().y);
            Vector2i cMousePos = mapCoordsToPixel (Vector2f(Mouse::getPosition(*this).x, Mouse::getPosition(*this).y), view);
            string finalPos = conversionIntString(cMousePos.x)+"#"+conversionIntString(cMousePos.y);
            Vec2f fPos (cMousePos.x, cMousePos.y);
            points.clear();

            if (map->gridMap->getGridCellAt(fPos) != NULL) {

                Vec2f cView (centerView.x, centerView.y);

                if (map->gridMap->getGridCellAt(cView) == map->gridMap->getGridCellAt(fPos)) {
                    points.push_back(fPos);
                } else {
                    Network::sendMessage("MOVE2*"+startPos+"#"+finalPos);
                    int size = conversionStringInt (Network::getLastResponse());
                    for (int i = 0; i < size; i++) {
                        vector<string> parts = split (Network::getLastResponse(), "*");
                        Vec2f point (conversionStringInt(parts[0]), conversionStringInt(parts[1]));
                        points.push_back(point);
                    }
                }
                currentPointIndex = 0;
                selectedCar->setMoving(true);
                Vec2f dir = points[currentPointIndex] - cView;
                dir = dir.normalize();
                selectedCar->setDir(dir);

            }
        }
        if (keyboardMove) {
            centerView = view.getCenter();
            caracter->getSprite().setPosition(centerView);
            map->gridMap->checkVisibleTiles(centerView);
            Vector2i position = mapCoordsToPixel(Vector2f(0, 0), view);

            BoundingRectangle br (position.x, position.y, view.getSize().x, view.getSize().y);
            lm->checkVisibleLights(br);
            //map->gridMap->checkCollisions (centerView);
            lm->checkVisibleShadows();
            lm->checkVisibleSegsWalls();
            setView(view);
        }
    }
}
 
Le personnage bouge bien mais j'ai un écran tout noir à cause de ce bug.
« Modifié: Mars 07, 2013, 11:19:41 am par Lolilolight »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #5 le: Mars 07, 2013, 11:37:06 am »
Est-ce que ShadowTile hérite de Tile ? Si oui, c'est normal que toutes les deux détruisent "shadow" dans leur destructeur ?

Citer
Le personnage bouge bien mais j'ai un écran tout noir à cause de ce bug.
Quoi, ça plante pas ?
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #6 le: Mars 07, 2013, 02:40:04 pm »
Non ça ne plante plus depuis que j'ai téléchargé un driver propriétaire pour ma carte graphique sur ubuntu, c'est juste que j'ai un écran noir quand je commence à me déplacer dans le monde et dans le débugueur ça m'affiche cela...
Sinon, non Shadowtile n'hérite pas de Tile.
Mais en effet il faut que j'enlève le destructeur de ShadowTile, j'ai modifié mon code et oublié de l'enlever et puis comme ça tournais sous windows sans planter en plus. :/
Je vais toujours enlever ce destructeur et je verrai si j'ai toujours le même problème d'écran noir.
Bon j'ai enlever un descructeur mais ça ne règle pas le problème, j'ai toujours un freeze.
PS : je ne sais pas pourquoi mais mon PC souffre avec la SFML 2.0 sous ubuntu. :/
Il va même jusqu'à s'éteindre tout seul. :/
« Modifié: Mars 07, 2013, 03:07:40 pm par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [SFML2.0]Crash sous plateforme ubuntu au rendu.
« Réponse #7 le: Mars 08, 2013, 02:20:28 pm »
Bon, le setView à chaque fois sur la RenderWindow que j'utilise via Qt ne marche décidément pas sous ubuntu, je n'ai rien qui bouge comme sous window et c'est super lent. :/

Le pointeur sur la vue de la SFML 1.6 semble marcher mieux sous ubuntu mais, je dois encore faire un code minimal pour m'en assurer.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Bon je suis repassé sur windows et depuis que je suis passé sur ubuntu en version 32 bits puis retesté sur windows 7 en version 64 bits, j'ai des déplacements saccadé et mes tests de collisions ne marchent plus, il passe à travers les murs, bref, la vidéo montre tout :
http://www.youtube.com/watch?v=dM3QyKyeRqU&feature=youtu.be

Voici la fonction qui déplace ma vue, je ne fais rien d'autre que d'envoyer un message au serveur avec la nouvelle position du personnage lorsque j'appuis sur une flèche du clavier, le serveur vérifie si le personnage peut se déplacer sur la case ou pas et envoie la réponse, si c'est ok, le personnage et la vue bougent, sinon ça n'est pas sensé bouger, bref..., voici le code :
void MyCanvas::processEvents () {
    Event event;
    Vec2f center = caracter->getRelCoords();
    Vec2f size (caracter->getSize().x, caracter->getSize().y);
    Vec2f pos (center.x - size.x  * 0.5f, center.y - size.y * 0.5f);

    bool keyboardMove = false;
    while (pollEvent(event)) {
        if (Keyboard::isKeyPressed(Keyboard::Right)) {
            float elTime = clock.getElapsedTime().asMilliseconds();
            Network::sendMessage("MOVE*"+conversionIntString(pos.x + speed * elTime)+"#"+conversionIntString(pos.y)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameX(speed * elTime);
                view.move(speed * elTime, 0);
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Left)) {
            float elTime = clock.getElapsedTime().asMilliseconds();
            Network::sendMessage("MOVE*"+conversionIntString(pos.x - speed * elTime)+"#"+conversionIntString(pos.y)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameX(-speed * elTime);
                view.move(-(speed * elTime), 0);
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Up)) {
            float elTime = clock.getElapsedTime().asMilliseconds();
            Network::sendMessage("MOVE*"+conversionIntString(pos.x)+"#"+conversionIntString(pos.y - 25)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameY(-(speed * elTime));
                view.move(0, -(speed * elTime));
                keyboardMove = true;

            }
        } else if (Keyboard::isKeyPressed(Keyboard::Down)) {
            float elTime = clock.getElapsedTime().asMilliseconds();
            Network::sendMessage("MOVE*"+conversionIntString(pos.x)+"#"+conversionIntString(pos.y + speed * elTime)+"#"+conversionIntString(size.x)+"#"+conversionIntString(size.y));
            string response = Network::getLastResponse();
            selectedCar->setMoving(false);
            if (response == "Ok") {
                map->setOffsetFrameY(speed * elTime);
                view.move(0, speed * elTime);
                keyboardMove = true;

            }
        }
        if (keyboardMove) {
            centerView = view.getCenter();
            caracter->getSprite().setPosition(centerView);
            map->gridMap->checkVisibleTiles(centerView);
            Vector2f position = convertCoords(Vector2i(0, 0), view);

            BoundingRectangle br (position.x, position.y, view.getSize().x, view.getSize().y);
            lm->checkVisibleLights(br);
            //map->gridMap->checkCollisions (centerView);
            lm->checkVisibleShadows();
            lm->checkVisibleSegsWalls();
            setView(view);
        }
    }
}
 


Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Non rien j'ai compris fallait que je convertisse explicitement en int le résultat de speed * elapsedTime qui sont des unsigned int avant d'envoyer à view.move, sinon, il fait n'imp.
Mais j'ai parfois de très grands écarts de temps entre les différents appels à la méthode update(), du coup ça me fait des déplacements saccadés.
« Modifié: Mars 21, 2013, 01:03:49 pm par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : j'ai enfin trouvé!
« Réponse #10 le: Mars 21, 2013, 01:19:15 pm »
La gestions d'évènement si j'utilise Qt avec la SFML, c'est mieux de le faire avec Qt, car appeler pollEvent dans la méthode de rafraichissement du widget Qt me donne des déplacement saccadés.

Tant pis pour la variable booléennes je vais recréer une propre classe pour ça pour vérifier si une touche est enfoncée ou pas.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Oui non ça me fait ça même en gérant les events avec Qt ou la SFML, à mon avis, c'est parce que je fais les tests sur la même machine avec le client et le serveur donc bon depuis que j'ai inclus le déplacement aléatoire des monstres..., à mon avis, ça ralentis, faudrait que j'essaye sur 2 machine différents pour voir si ça va mieux ou pas, si oui, je crois que je vais continuer les test sur 2 machines différentes. (Heureusement d'ailleurs que j'ai 2 PC. :/)

 

anything