Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Rzut kostką, zbyt wiele wykonań

Ostatnio zmodyfikowano 2014-06-19 10:23
Autor Wiadomość
kamilall234
Temat założony przez niniejszego użytkownika
[SFML] Rzut kostką, zbyt wiele wykonań
» 2014-06-14 03:35:04
Witam. Mam problem. Mam przycisk zrobiony za pomoca SPrite, którego kliknięcie wywołuje funkcję rzut kostką, a on zwraca wartość wyrzuconych pol, jednak jest problem taki, iż przy jednym kliknięciu tych rzutów wykonuje się o wiele za dużo. Jakie jest rozwiązanie, aby to troche wstrzymac. Myślę ze tutaj chodzi o czas kliknięcia, z którym wiąże się taktowanie procesora. Jednak nie mam pomysłu na rozwiązanie tego.

C/C++
if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && przycisk_rzuc.getGlobalBounds().contains( MousePos ) )
{
    bool rzucanie = true;
    while( rzucanie == true )
    {
        std::cout << " " << endl;
        int kolejeczka = 0;
        gra->kolejka_gry( 1, kolejeczka );
        rzucanie = false;
    }
}
P-112049
SeaMonster131
» 2014-06-14 10:14:21
C/C++
bool click = false;

if( klikniecie && !click )
{
    //...
    click = true;
}

if( !klikniecie && click )
     click = false;

P-112051
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-06-14 12:56:55
W klikniecie mam wstawić
przycisk_rzuc.getGlobalBounds().contains( MousePos )

Jeżeli tak to dalej nie działa, zapętla się baaaardzo dużo razy. Jeżeli wstawie coś o co zapyta w konsoli to wtedy rzuca tylko raz np, ale to bez sensu, żeby po kliknieciu jeszcze akceptować to w konsoli.

C/C++
bool rzucanie = true;
while( rzucanie == true )
{
    std::cout << "chcesz rzucic kostka" << endl;
    std::cin >> rzucanie;
}
//teraz tutaj funkcja do rzucania
P-112055
Monika90
» 2014-06-14 14:52:58
wygląda na to, że sprawdzasz w pętli czy przycisk myszy jest naciśnięty, zamiast tego obsługuj zdarzenie naciśnięcia (i ewentualnie zwolnienia przycisku)
http://cpp0x.pl/kursy​/Kurs-SFML-2-x-C++/Podstawy​/Obsluga-zdarzen-klawiatura-mys​z-i-inne​/468
P-112061
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-06-14 15:33:59
Uzywam obsługi wciśniecia przycisku lewego i potem jest uruchamiana funkcja rzucajaca kostka, jednak wykonuje sie kilka razy. A jedno klikniecie=jeden rzut powinno sie odbyc.

/Edit:

Problem zażegnany.

Używałem
C/C++
if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && przycisk_rzuc.getGlobalBounds().contains( MousePos ) )
{
    if( wait && !sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
    {
    }
}

A trzeba było :
C/C++
while( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && przycisk_rzuc.getGlobalBounds().contains( MousePos ) )
{
    if( wait && !sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
    {
    }
}
P-112065
pekfos
» 2014-06-19 10:23:02
A jak przytrzymasz dłużej LPM? Użyj zdarzeń, otrzymujesz wtedy MouseButtonPressed/MouseButtonReleased tylko raz na jedno kliknięcie i nie trzeba tak pod górę kombinować..
P-112285
« 1 »
  Strona 1 z 1