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

[SFML] wydajność ,zdarzenia klawisze

Ostatnio zmodyfikowano 2012-02-26 11:15
Autor Wiadomość
hincu
» 2012-02-19 13:26:15
skompiluj sobie kod przechwytywania klawiszy bez timerow i zobaczysz jak szybko 'drukuje' ci kolejne znaki : P
P-50974
akwes
» 2012-02-19 14:31:08
Timery mogą Ci być potrzebne, ale nie muszą. Zależy jaką aplikację piszesz. Jeżeli to gra, to prędzej czy później będą musiały się pojawić, jeżeli trenujesz używanie sf::Input, sf::Event to nie koniecznie ;)

Co to sf::Event, chodziło mi o to czy pobierasz sf::Event więcej jak jeden raz w czasie obiegu pętli?
P-50979
maestro
Temat założony przez niniejszego użytkownika
» 2012-02-19 19:58:46
Jak napisałem w kodzie znajduje się sf::Input i sf::Event


C/C++
if( sterowka2.IsKeyDown( sf::Key::W ) )
{ ra[ 1 ] += 0.1; }

if( sterowka2.IsKeyDown( sf::Key::S ) )
{ ra[ 1 ] -= 0.1; }

if( sterowka2.IsKeyDown( sf::Key::D ) )
{ ka[ 1 ] -= 5; }

if( sterowka2.IsKeyDown( sf::Key::A ) )
{ ka[ 1 ] += 5; }

if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::X )
{ start += 1;
    if( start > 2 )
    { start = 1; } }

if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::V )
{ start = 3; }
jak widać sf::Event pobieram kilka krotnie (proces) 


a wcześniej nie było sf::Input i wszystko było razem w sf::Event proces;
P-51026
akwes
» 2012-02-19 20:29:45
Widzę, że nie dogadamy się :P Może tak:

C/C++
#include <SFML/Window.hpp>

int main()
{
    sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            //tu obsługa zdarzeń
        }
       
        oknoAplikacji.Display();
    }
    return 0;
}
Kod z kursu.

Jeżeli odczytujesz cokolwiek z sf::Event poza tą pętelką (ewnentualnie można wysłać gdzieś coś przez funkcję, ale to i tak musi być w tej pętli) to nie będzie miało sensownych wartości.

Natomiast sf::Input, działa wszędzie.


P-51035
maestro
Temat założony przez niniejszego użytkownika
» 2012-02-19 21:50:26
no okej ale podałem że Event ma te samą nazwę wiadomo gdzie ma być po prostu naciskałem strzałkę w prawo i do przodu i nie działały jednocześnie
,ale dziwi mnie to dlaczego Event działa tylko raz na cały skład
napisałem jak korzystam z Event i z Input dla każde jest kilka opcji

o czytaj tu poniżej ja byk pisze teraz i pisałem wcześniej nie wiem czego ci brakuje
C/C++
if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::X )
{ start += 1;
    if( start > 2 )
    { start = 1; } }

if( proces.Type == sf::Event::KeyPressed && proces.Key.Code == sf::Key::V )
{ start = 3; }
właściwie to dotyczy zmiennej start ale przecież na przykład może tam w jednej x ,a w drugiej y
P-51055
akwes
» 2012-02-19 23:21:08
C/C++
if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::X )
{
    x++;
    system( "cls" );
    cout << "x=" << x << "   y=" << y;
}

if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::V )
{
    y++;
    system( "cls" );
    cout << "x=" << x << "   y=" << y;
}

Działa tak jak powinno.

W zależności, który klawisz był wciśnięty ostatnio ten działa.
Jeżeli kliknę oba naraz (naraz, nie jeden po drugim) to zwiększają oba.

KeyPressed, czyli klawisz wciśnięty.

1: Wciskam klawisz A
2: Wciskam klawisz B, nie puszczając A. To będzie działał klawisz B.
Chyba że
1: Wciskam naraz klawisz A i B, wtedy działają oba, bo oba były ostatnio wciśnięte.
P-51070
maestro
Temat założony przez niniejszego użytkownika
» 2012-02-20 00:10:41
nie ma takiej siły żeby oba działały (ale zabawne :D )nie w sfml sf::Event tak samo jak się pisze tekścik nie napisze obu znaków na raz
nawet najmniejsza jednostka czasu na to wpłynie nawet pomiędzy tymi wciśnięciami zrobi się kilka pętli (a może i więcej) :)
na przykład gdy bym robił metin -a to by użył ,i Event ,i Input (ale gdy by były tam samochody to Input ważna rzecz) 
P-51076
akwes
» 2012-02-25 23:04:17
No proszę, u mnie jednak działały. Jeżeli tylko zostały razem wciśnięte, nie zawsze się udawało od razu, ale udawało. Z kodem, który jest wyżej.
P-51430
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona