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

[C++, SFML] Podświetlanie

Ostatnio zmodyfikowano 2014-01-20 14:05
Autor Wiadomość
Deo
Temat założony przez niniejszego użytkownika
[C++, SFML] Podświetlanie
» 2014-01-20 13:41:32
Witam, piszę aplikacje w, której będę podświetlał sobie różne prostokątne elementy, lecz niestety mam mały problem, albowiem podświetla się wyłącznie jeden element, który jest sprawdzany jako ostatni przy najechaniu myszy na jakiś obiekt. Proszę, więc o udzielenie pom*cy. ;)


Sprawdzenie czy "najechano" myszą na obiekt: (Oczywiście jest to napisane w takiej formie, ponieważ to testowałem.)

C/C++
if( event.type == event.MouseMoved )
{
   
    float mouse_x = event.mouseMove.x;
    float mouse_y = event.mouseMove.y;
   
    for( int i = 1; i <= 5; i++ )
    {
        MoveIsArea( mouse_x, mouse_y, 120 * i, 100, 100, 100 );
       
    }
   
}

Wyświetlenie:

C/C++
if( light_status == true ) {
    d.loadFromFile( "data\\images\\light.png", sf::IntRect( 0, 0, Lighta[ 3 ], Lighta[ 4 ] ) );
    c.setTexture( d );
    c.setPosition( Lighta[ 1 ], Lighta[ 2 ] );
    window.draw( c );
}

Funkcje:

C/C++
bool MoveIsArea( float mysz_x, float mysz_y, int obiekt_x, int obiekt_y, int dlugosc, int szerokosc )
{
   
    if( mysz_x > obiekt_x && mysz_x < obiekt_x + dlugosc && mysz_y > obiekt_y && mysz_y < obiektb_y + szerokosc )
    {
       
        Litghten_p( obiekt_x, obiekt_y, dlugosc, szerokosc );
        light_on();
        return true;
    }
   
   
    light_off();
   
    return false;
   
}



void Litghten_p( int x, int y, int xe, int ye )
{
   
    Lighta[ 1 ] = x;
    Lighta[ 2 ] = y;
    Lighta[ 3 ] = xe;
    Lighta[ 4 ] = ye;
   
}



void light_on()
{
    light_status = true;
}

void light_off()
{
   
    light_status = false;
}

Jeżeli ktoś z pierwszego zdania nie zrozumiał na czym polega mój problem, tłumaczę raz jeszcze: pętla sprawdza czy nie najechano na jeden z "pięciu" obiektów, lecz działa poprawnie wyłącznie przy piątym okrążeniu, czyli ostatnim obiekcie. Sprawdzałem oczywiście czy nie jest to problem z sprawdzeniem tego czy najechano na obiekt i tak nie jest. Nawet jeżeli najedziemy myszką na inny z pięciu obiektów funkcje zostają wywołane, lecz niestety nie widać jakoś tego na ekranie. :/

Jeżeli brakuje jakiegoś potrzebnego do ocenienia sytuacji kodu, proszę pisać. ;)
P-102607
DejaVu
» 2014-01-20 13:53:43
Może Twój kod zawsze renderuje podświetlenie zawsze na tej pozycji, a nie dla obiektu, który jest zaznaczany?

PS. Polecam poczytać o strukturach, bo trzymanie w jednej tablicy wielu niepowiązanych ze sobą wartości jest co najmniej strzałem w stopę, jeżeli później będziesz szukał jakichś błędów.

Fatalnym rozwiązaniem ze względów wydajnościowych jest również wczytywanie co chwilę tekstury by 'zapalić' światło (czyli zrobić podświetlenie).
P-102608
PsichiX
» 2014-01-20 13:56:35
light_off();
to umiesc przed wykonaniem petli i usun z funkcji, w ktorej jest - za kazdym razem dla kazdego itemu wykonujesz sprawdzanie czy jest nad nim kursor i jesli jest, to wlaczasz swiatlo pod nim, a jesli nie ma to wylaczasz dla wszystkich, dlatego swiatlo pojawia sie tylko na ostatnim.
P-102609
Deo
Temat założony przez niniejszego użytkownika
...
» 2014-01-20 14:05:19
@DejaVu Sprawdziłem, funkcja podająca pozycję działa poprawnie. Dziękuje za dobrą radę. :)

@PsichiX Dzięki, wielkie wszystko teraz pięknie działa. ;) Tak właśnie przed przeczytaniem twojego postu zauważyłem (sprawdzając czy pozycja zostaje poprawnie ustawiona.), że po wyrzuceniu funkcji light_off() obiekty się podświetlają, tylko się zastanawiałem jak to "rozegrać", żeby przestawały świecić. Jeszcze raz dzięki. ;)
P-102612
« 1 »
  Strona 1 z 1