• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML mouse.getPosition() w wątku

Object Storage Arubacloud
+3 głosów
721 wizyt
pytanie zadane 27 czerwca 2015 w C i C++ przez Pan Kulomb Pasjonat (18,630 p.)
edycja 28 czerwca 2015 przez Pan Kulomb

Witam, ostatnio odczytywałem współrzędne myszy w wątku, jednak wtedy program się sypał.

Wie ktoś może dlaczego tak się dzieje?

#include "Button.h"

Button button("3D");
sf::RenderWindow window(sf::VideoMode(500, 500), "Graph");
sf::Event event;
sf::Mouse mouse;

void thread_function()
{
    while(window.isOpen())
    {
        sf::Vector2f position = sf::Vector2f(mouse.getPosition(window));
        button.setPosition(position);
        sf::sleep(sf::seconds(1));
    }
}

int main()
{
    window.setFramerateLimit(60);

    button.setWindow(window);
    button.setMouse(mouse);

    sf::Thread thread(&thread_function);
    thread.launch();

    while(window.isOpen())
    {
        window.clear(sf::Color(31, 31, 31));

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

        window.draw(button);
        window.display();
    }
}

Dałem tutaj opóźnienie 1s, bo wtedy przynajmniej przez kilka sekund się nie sypie, a później po prostu okno znika, program przestaje działać (mimo, że nie klikałem na krzyżyk).

2 odpowiedzi

+2 głosów
odpowiedź 27 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
Aktualnie mogę wywnioskować że coś skopałeś.

Ale niestety nie mogę określić co, ponieważ posiadam niewystarczającą ilość informacji.

Czy mógłbyś podać kod?

Kod programu znacząco ułatwi nam pracę.
komentarz 28 czerwca 2015 przez Pan Kulomb Pasjonat (18,630 p.)
już jest kod
0 głosów
odpowiedź 27 czerwca 2015 przez daan Pasjonat (17,640 p.)
Może coś więcej ? Jakiś kod ? Może program nie sypał się z tego powodu ? :)
komentarz 28 czerwca 2015 przez Pan Kulomb Pasjonat (18,630 p.)
kod wstawiony
komentarz 28 czerwca 2015 przez daan Pasjonat (17,640 p.)

wyrzuciłem z niego obiekt Button, i sleep, uruchomiłem i działa więc wnioskuje, że problem jest w klasie Button :) Poniżej masz kod, który u mnie działa i sie nie wywala :P

#include <SFML\Graphics.hpp>
#include <iostream>
sf::RenderWindow window(sf::VideoMode(500, 500), "Graph");
sf::Event event;
sf::Mouse mouse;

void thread_function()
{
	while (window.isOpen())
	{
		sf::Vector2f position = sf::Vector2f(mouse.getPosition(window));
		std::cout << position.x << " " << position.y << std::endl;
		//sf::sleep(sf::seconds(1));
	}
}

int main()
{
	window.setFramerateLimit(60);

	sf::Thread thread(&thread_function);
	thread.launch();

	while (window.isOpen())
	{
		window.clear(sf::Color(31, 31, 31));

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

 

Podobne pytania

+1 głos
3 odpowiedzi 625 wizyt
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 31 grudnia 2020 w C i C++ przez NieMaJuzNazw Użytkownik (890 p.)
+1 głos
2 odpowiedzi 1,342 wizyt
pytanie zadane 29 maja 2015 w C i C++ przez majkkel Użytkownik (530 p.)

92,762 zapytań

141,686 odpowiedzi

320,499 komentarzy

62,106 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...