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

[SFML 1.6] Przesuwanie tablicy sprit'ów

Ostatnio zmodyfikowano 2014-05-08 21:49
Autor Wiadomość
kedarr41
Temat założony przez niniejszego użytkownika
[SFML 1.6] Przesuwanie tablicy sprit'ów
» 2014-05-07 14:50:40
Witam... mam taki problem... tworzę grę, w której samolot leci przed siebie i omija przeszkody. Oczywiście widok z góry... No więc, mam tablicę sprit'ów 'kwadrat[11][20]'... muszę przesuwać tablicę w taki sposób, aby w pętli for z zmiennymi i oraz j działa się taka sztuczka, że np. Pozycja przedostatniego elementu równa jest pozycji ostatniego. Do tego stosuję taką oto linijkę:

kwadrat [ i ] [18-j].SetPosition(kwadrat [ i*93 ] [(19-j)*93]

Szczegóły:

Kwadracik ma 93 pixele. Każdy kwadracik (ze względów technicznych) przesuwa się w stronę samolotu... czyli użyty jest kwadrat.Move... co 93 pixele, miałby następować przeskok w tablicy, gdyż pozycja w tablicy jest bezpośrednio związana z pozycją sprita. Dlaczego co 93 pixele? Żeby nie było żadnego widocznego przeskoku...

Problem:

po użyciu przedstawionej linijki kodu dzieje się tak: 1 kolumna się porusza, reszta stoi... A 10 kwadrat w 1 kolumnie znika...

Podsumowanie:

Chce się dowiedzieć dlaczego tak jest i co mógłbym zrobić, żeby tak nie było.

C/C++
void Aktualizuj_mape( int Pos_y, postac & k, float mnoznik )
{
    int Ikwa = 93;
    for( int i = 0; i < 11; i++ )
    {
        for( int j = 0; j < 20; j++ )
        {
           
            Vector2f kwa = kwadrat[ i ][ j ].GetPosition();
            Ikwa = kwa.y;
           
           
            if( Ikwa % 93 != 0 && zablokuj_aktualizacje == 1 ) //resetuje blokade po przejsciu pewnej strefy;
            {
               
                zablokuj_aktualizacje = 0;
            }
            if( kafelki[ i ][ j ].Give_ID() == 1 )
            {
                kwadrat[ i ][ j ].Move( 0, 100 * mnoznik );
                kwadrat[ i ][ j ].SetSubRect( IntRect( 0, 33, 31, 64 ) );
            }
            kwa = kwadrat[ i ][ j ].GetPosition();
            Ikwa = kwa.y;
           
           
            if( Ikwa % 93 == 0 && zablokuj_aktualizacje == 0 )
            {
                if( j != 19 )
                {
                   
                    kwadrat[ i ][ 18 - j ].SetPosition( i * 31 * 3, 31 * 3 *( 19 - j ) );
                   
                }
            }
           
           
        }
    }
   
    zablokuj_aktualizacje = 1;
   
}
P-109427
pekfos
» 2014-05-08 12:02:11
C/C++
kwadrat[ i ][ 18 - j ].SetPosition( i * 31 * 3, 31 * 3 *( 19 - j ) );
Po co tu te odwracanie j?
P-109487
kedarr41
Temat założony przez niniejszego użytkownika
» 2014-05-08 19:03:47
Ponieważ, jeżeli będę pobierał wartości normalnie np: kwadrat[ i ][j-1]=kwadrat[ i ][j] gdzie j=1... to gdy będę chciał pobrać kwadrat[ i ][j-1]=kwadrat[ i ][j] dla j=2... okaże się, że ciągle będzie pobierana wartość 1 elementu... więc jeżeli 1 rząd ma wartość = 0... to nieużycie odwrotności j było by jak reset tablicy.(wszystkie elementy będą miały wartość = 0)


Ale i tak największym problemem na chwilę obecną jest to, że wspomagam się klasą kafelków... no i jeśli kafelek[ i ][j] = 1... to rysuj sprita... to właśnie te kafelki przesuwam.. już z pominięciem ruchu ciągłego. No i działa ładnie tzn. jeśli kafelek[ i ][11]=1 to po sekundzie kafelek[ i ][11]=0 a [ i ][12]=1... natomiast na 10 elemencie dzieje się tak, że kafelek[ i ][9] jak [ i ][10]mają o dziwą tą samą wartość, chociaż absolutnie nie ma prawa się tak dziać... O co chodzi?[/i]
P-109513
pekfos
» 2014-05-08 21:49:20
Ponieważ, jeżeli będę pobierał wartości normalnie np: kwadrat[ i ][j-1]=kwadrat[ i ][j]
W kodzie nie masz nawet podobnego przypisania..
P-109529
« 1 »
  Strona 1 z 1