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

Pages: [1]
1
Fenêtrage / Re : Exception à la création d'une sf::Window
« le: Août 30, 2016, 02:28:07 am »
Même exception à la même ligne...

2
Fenêtrage / Exception à la création d'une sf::Window
« le: Août 26, 2016, 09:41:45 pm »
Bonjour,

lorsque j'utilise le debugger en version Debug sous Visual Studio, j'ai un message d'exception:

«Exception thrown at 0x77993923 (ntdll.dll) in test exception on startup sfml.exe: 0xC0000005: Access violation reading location 0x701F14C8.»

Le programme fonctionne bien quand je l'ignore, mais c'est tout de même gênant de toujours avoir ce message :/


Code minimal:
#include <SFML/Window.hpp>

int main()
{
        sf::Window window({ 640, 480 }, "test");
        return 0;
}
 

Call stack:
> test exception on startup sfml.exe!sf::priv::WglContext::setDevicePixelFormat(unsigned int bitsPerPixel) Line 398 C++
  test exception on startup sfml.exe!sf::priv::WglContext::createSurface(sf::priv::WglContext * shared, unsigned int width, unsigned int height, unsigned int bitsPerPixel) Line 535 C++
  test exception on startup sfml.exe!sf::priv::WglContext::WglContext(sf::priv::WglContext * shared) Line 90 C++
  test exception on startup sfml.exe!sf::priv::GlContext::globalInit() Line 182 C++
  test exception on startup sfml.exe!sf::GlResource::GlResource() Line 56 C++
  test exception on startup sfml.exe!sf::Window::Window(sf::VideoMode mode, const sf::String & title, unsigned int style, const sf::ContextSettings & settings) Line 60 C++
  test exception on startup sfml.exe!main() Line 5 C++


J'avais l'exception dans un projet sous SFML 2.3.2, j'ai donc essayé avec SFML 2.4.0, mais le résultat est le même :/ Est-ce un bug de SFML?

Merci!

3
1. Il faudrait que chaque partie du code qui dépend du temps ou d'un nombre de frames passées soit modifée pour utiliser la variable deltatime. (toutes les animations, les systèmes de spawn d'objets, les déplacements de sprites, etc.)

2. Cela briserait probablement le système de physique quand le framerate est trop bas.

4
Les mouvements sont encore très saccadés par moments (malgré, l'extrapolation de la position). Je crois que je vais simplement limiter le framerate à 60 fps, car ça ma l'air moins pire...

5
J'ai essayé de l'implémenter sans la dernière partie avec la prévision de la position pour le temps qu'il reste. Cela marche pour garder la même vitesse malgré le framerate, mais il reste du screen tearing...

#include <SFML/Graphics.hpp>

#include <iostream>
using namespace std;

int main()
{
        sf::RenderWindow window(sf::VideoMode(640, 480), "Framerate test");
        window.setVerticalSyncEnabled(true);

        sf::RectangleShape shape(sf::Vector2f(32, 32));
        sf::RectangleShape shape2(sf::Vector2f(32, 32));

        int a = 0;

        sf::Clock clock;
        double previous = clock.getElapsedTime().asSeconds();
        double lag = 0.0;

        while (window.isOpen()) {
                double current = clock.getElapsedTime().asSeconds();
                double elapsed = current - previous;
                previous = current;
                lag += elapsed;

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

                while (lag >= (1.0 / 60.0)) {
                        shape.setPosition(320 + sin(0.05*a) * 250, 240 + sin(0.1*a) * 50);
                        shape2.setPosition(320 + -sin(0.05*a) * 250, 120 + sin(0.1*a) * 50);
                        a++;
                        lag -= (1.0 / 60.0);
                }

                window.clear();
                window.draw(shape);
                window.draw(shape2);
                window.display();
        }

        return 0;
}
 

J'imagine que la seule façon de l'empêcher est de faire un calcul pour chaque objet en l'affichant ? Ça semble un peu compliqué...

6
Oui, ça je suis au courant  ;)

Ce que je voudrais faire, c'est faire en sorte que mon jeu ne roule pas plus vite sur un moniteur de 120Hz que sur un de 60Hz. Je crois (c'est ce que j'ai lu, mais je ne peux pas le tester), que vsync fait en sorte que le framerate est le même que celui de l'écran.

7
Bonjour, j'essaie de réduire le screen tearing dans mon jeu en activant la vsync, mais d'après ce que je comprends, le fps ne sera pas le même sur un moniteur avec un taux de rafraichissement différent du mien.

Est-ce vrai ? Si oui, comment s'assurer que la vitesse reste la même sur différents moniteurs, sans avoir à déplacer chaque objets selon le temps écoulé depuis la dernière frame ? (ce qui rendrait mon code plus difficile à lire...)



Pages: [1]