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

[SFML] Problem z przechodzeniem pionka na planszy.

Ostatnio zmodyfikowano 2014-06-18 11:32
Autor Wiadomość
kamilall234
Temat założony przez niniejszego użytkownika
[SFML] Problem z przechodzeniem pionka na planszy.
» 2014-06-17 23:51:31
Witam. Mam problem z przechodzeniem pionka na planszy. Obiekt klasy gracz zawiera w sobie pionek (Sf::Sprite), przy tworzeniu gracza, automatycznie tworzony jest pionek gacza. Ustawiany na pozycje nr 0 na planszy. Błąd polega na tym, iż pionek wyświetla się w kilku pozycjach. Mianowicie rzuce 5, on jest na 5. Potem rzuce , jest na 5 i na 12. W dodatku mam problem z wyświetlaniem okna gry. Po wciśnieciu przycisku, "rzuć kostką" wyświetla się poprzedni ekran menu, jednak w "tle" jest dalej plansza, ponieważ klikająć ponownie w miejsce "rzuc kostka" (przycisku tego nie widać) jest wykonywany ruch i wraca plansza i przyciski, i po ponownym kliknieciu znika i tak wkółko. Mam te dwa problemy których nie mogę rozwiązać.
Funkcja "narysuj" jest mało znacząca w tym wszystkim. Tak jakby funkcja move, nie działa do konca jakbym chciał

C/C++
void Gracz::pozycja_pionka( sf::RenderWindow & okno )
{
    float x, y;
    if( pozycja_na_planszy < 10 )
    {
        x = 490;
        y = 570 -( 5 * numer_gracza );
        cout << "Pozycja" << endl;
        cout << pozycja_na_planszy << endl;
        float roznica = pozycja_na_planszy * 35;
        x = x - roznica;
        pionek_gracza.move( x, y );
        okno.draw( pionek_gracza );
       
    }
}

class Gracz
{
private:
    int numer_gracza;
    string kolor;
    int pozycja_na_planszy; //tak tylko dla sprawdzenia do funkcji pionka
    sf::Sprite * pionek_gracza;
   
public:
    Gracz( int, int );
    int rzut_koscia( Kosc * ); // rzuca koscia gracz
    int ruch_gracza( int, Kosc * );
    void pozycja_pionka( sf::RenderWindow & okno );
    void narysuj( sf::RenderWindow & okno, sf::Sprite );
   
};

void Gracz::narysuj( sf::RenderWindow & okno, sf::Sprite okno_do_wyswietlania )
{
    sf::Text login, cash, polakupione;
    login = tekst( okno_do_wyswietlania, nazwa );
    okno.draw( login );
    okno_do_wyswietlania.setPosition( okno_do_wyswietlania.getPosition() + sf::Vector2f( 0, 30 ) );
    string skonto;
    skonto = "Kasa: ";
    ostringstream convert;
    convert << konto;
    skonto = skonto + convert.str();
    cash = tekst( okno_do_wyswietlania, skonto );
    okno.draw( cash );
    ostringstream convert2;
    string pola;
    pola = "Karty :";
    for( int i = 0; i < karty_gracza.size(); i++ )
    {
        convert2 << karty_gracza[ i ]->numer_dzialki();
        pola = pola + convert2.str();
        pola = pola + ", ";
    }
    okno_do_wyswietlania.setPosition( okno_do_wyswietlania.getPosition() + sf::Vector2f( 0, 30 ) );
    polakupione = tekst( okno_do_wyswietlania, pola );
    okno.draw( polakupione );
   
   
    //okno.display();
}
P-112208
maly
» 2014-06-18 09:31:18
Błąd polega na tym, iż pionek wyświetla się w kilku pozycjach
Pewnie nie czyścisz okna.

Po wciśnieciu przycisku, "rzuć kostką" wyświetla się poprzedni ekran menu, jednak w "tle" jest dalej plansza
Pewnie nie czyścisz okna.

ponieważ klikająć ponownie w miejsce "rzuc kostka" (przycisku tego nie widać) jest wykonywany ruch i wraca plansza i przyciski, i po ponownym kliknieciu znika i tak wkółko
Czemu obsługujesz nie widoczny przycisk?
P-112216
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-06-18 10:34:29
Tylko że nie bardzo wiem, jak mam wyczyścić okno, aby pozostała plansza i układ pionków na nim. Trzeba od nowa wszystko narysowac? Chciałem by zostawało tło planszy a ruszały się tylko pionki.

Biorąc oknoAplikacji.clear(), wyczysci mi cały ekran na którym musze budować wszystko od nowa.
P-112222
Glazus
» 2014-06-18 11:32:04
Trzeba od nowa wszystko narysowac?
Tak. Możesz ewentualnie użyć też
sf::RenderTexture
.
P-112223
« 1 »
  Strona 1 z 1