[SFML 1.6] Przesuwanie tablicy sprit'ów
Ostatnio zmodyfikowano 2014-05-08 21:49
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. 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 ) { 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; }
|
|
pekfos |
» 2014-05-08 12:02:11 kwadrat[ i ][ 18 - j ].SetPosition( i * 31 * 3, 31 * 3 *( 19 - j ) );
|
Po co tu te odwracanie j? |
|
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] |
|
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.. |
|
« 1 » |