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

[SFML] Błąd z zapisywaniem pozycji tablicy sprite .

Ostatnio zmodyfikowano 2013-08-05 19:43
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-05 00:21:04
No tak , ale jeżeli jest to tablica , to jak moge zrobić inaczej ?? Jakiś licznik ([i]) tablicy musi być , lub ja nie wiem jak sie od tego ustrzec . Jak mógłbym nie używać pętli for przy każdej okazji z tablicą ??
P-89500
MrPoxipol
» 2013-08-05 10:00:13
Użyj tablicy dwuwymiarowej.
P-89501
pekfos
» 2013-08-05 10:26:45
Chyba mnie nie zrozumiałeś.. Wszystkie sprajty tablicy ustawiasz w jednym miejscu. W efekcie jest tak, jakbyś miał tylko jednego sprajta i go przesuwał po ekranie tam, gdzie klikniesz.

Użyj tablicy dwuwymiarowej.
Co?
P-89504
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-05 10:58:52
Teraz udało mi się dojść do aż 5 zapisanych figur ! już jest jakiś postęp , zmieniłem w funkcji głównej :
C/C++
for( int i = 0; i < 9; i++ )
{
    if( pole.inPole( posMouse ) == 2 )
    {
        pole.getPositionPole( posMouse, pozycjaNaFigure );
       
       
        pole.ustawFigury( pozycjaNaFigure, figury, kogo_kolej, i );
       
       
    }
}

i w funkcji ustawFigury :
C/C++
void Pole::ustawFigury( sf::Vector2f pozycjaNaFigure, sf::Sprite * sprite, short & kogo_kolej, int i )
{
    loadTexture();
   
   
   
    switch( kogo_kolej )
    {
    case 1:
        {
            sprite[ i ].setTexture( krzyzyk );
            sprite[ i ].setPosition( pozycjaNaFigure );
            kogo_kolej = 2;
            cout << pozycjaNaFigure.x << endl;
            cout << pozycjaNaFigure.y << endl << endl;
            break;
           
        }
       
        //krzyzyk
    case 2:
        {
            sprite[ i ].setTexture( kolko );
            sprite[ i ].setPosition( pozycjaNaFigure );
            kogo_kolej = 1;
            cout << pozycjaNaFigure.x << endl;
            cout << pozycjaNaFigure.y << endl << endl;
            break;
           
        }
        //kolko
       
    }
   
}
jednak nadal to jeszcze nie jest to ...
P-89505
pekfos
» 2013-08-05 11:04:01
Dalej nie wiem, dlaczego robisz to 9 razy. Wystarczy, że określisz, który sprajt został klikniety i tam ustawisz odpowiednią teksturę.
P-89507
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-05 11:19:00
Myślę że funkcja getPositionPole to robi no bo sprawdza całą tablice i jeżeli znajdzie jedno (jedyne) pole na którym jest myszka :
C/C++
void Pole::getPositionPole( sf::Vector2f pozycja_myszki, sf::Vector2f & pozycja_na_figure )
{
    for( int i = 0; i < 9; i++ )
    {
        if( pole[ i ].getGlobalBounds().contains( pozycja_myszki ) )
        {
            pozycja_na_figure = pole[ i ].getPosition();
           
        }
    }
}
to zwraca pozycje tego pola czyli tak jakby zwraca pozycje właśnie tego klikniętego pola (sf::RectangleShape) a potem jest przesyłana do ustawFigury żeby tam ustawić

C/C++
for( int i = 0; i < 9; i++ ) // rozpoczynamy pętlę
{
    if( pole.inPole( posMouse ) == 2 ) //sprawdzamy czy myszka została kliknięta i czy JAKIEŚ pole nie zawiera pozycji myszki , oprócz tego robi obwódki jak ktoś najedzie lub kliknie
    {
        pole.getPositionPole( posMouse, pozycjaNaFigure ); // sprawdza jeszcze raz całą tablice czy nie zawiera pozycji myszki oraz zwraca tą pozycje
       
       
        pole.ustawFigury( pozycjaNaFigure, figury, kogo_kolej, i ); // wysyłamy tam tą pozycje , tablice figury (jako wskaźnik ) , kogo kolej i OBIEG PĘTLI , czyli że figury[0] będzie pierwszym spritem , figury [1] drugim itp . jeżeli bym nie dał tutaj pętli to jak mógłbym pracować z tablicą ? czy da się w tym wypadku obyć bez pętli , tak oto wytłumaczyłem jak ja myślę o tym (błednie) , ale żebyście mnie poprawili :)
       
       
    }
}
P-89510
pekfos
» 2013-08-05 11:34:41
Ale dlaczego chcesz wszystko zrobić na raz? Kliknięcie dotyczy tylko jednego pola, więc, co najwyżej, jedno pole powinno Cię interesować.

jeżeli bym nie dał tutaj pętli to jak mógłbym pracować z tablicą
Normalnie?
P-89511
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-05 12:27:23
Zrobiłem teraz tak :
C/C++
//przed pętlami
int i = - 1;
// w petlach

if( pole.inPole( posMouse ) == 2 )

{
   
    ++i;
    pole.getPositionPole( posMouse, pozycjaNaFigure );
    pole.ustawFigury( pozycjaNaFigure, figury, kogo_kolej, i );
   
   
}
 Ten kod działa poprawnie :) , tylko teraz zrobić warunek który uniemożliwia stawiania na już użytych polach , wielkie dzięki pefkos !! :)
P-89526
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona