Winner Temat założony przez niniejszego użytkownika |
» 2014-12-12 19:43:58 Myślę, że jestem na dobrej drodze :D Napisałem taki testowy kod: for( int i = 0; i < TILE_SIZE; i++ ) { col = pixel[ 1 ].getPixel( 10, 10 ); if( col == sf::Color( 255, 255, 255 ) ) { GraMario.close(); } } Ale jeszcze pytanie: Dlaczego tutaj -> img[ i / 20 ] dzielisz i przez 20? |
|
colorgreen19 |
» 2014-12-12 19:49:30 ponieważ TILE_SIZE/TILE_COUNT = 20 ( 60/3=20 ). dlaczego tak? otóż: 1 pixel x należy do img[0]; 19 pixel x należy do img[0]; 20 pixel x należy do img[1]; 21 pixel x należy do img[1];
stosując to rozwiązanie który_pixel/szerokość_kafelka da nam nr obrazka na którym ten pixel sie znajduje bo 1/20 = 0 19/20 = 0 20/20 = 1 21/20 = 1 itd.. /dzielenie bez reszty wiec wszystko elegancko gra
a robimy to po to, by nie dobierać się do nieistniejącego pixela na obrazku ( co by niewiadomo czym skutkowało ) |
|
Winner Temat założony przez niniejszego użytkownika |
» 2014-12-12 20:09:24 Dobra to mam kod: for( int i = 0; i < TILE_SIZE; i++ ) { col = pixel[ i / 50 ].getPixel( i + map_x, 1 ); if( col == sf::Color( 255, 255, 255 ) ) { GraMario.close(); } } I mój obraz pixel[0] jest cały biały (czyli spełnia if) jednak nawet jak mojej postaci nie ma na tym kafelku to program się zamyka. Domyślam się że to przez to, że współrzędne w getPixel(i + map_x, 1); to współrzędne na pixel[0] a nie na mapie "globalnej". |
|
colorgreen19 |
» 2014-12-12 20:11:13 za mało kodu troche, daj wiecej. i sprawdź współrzędne cout'em, a nie sie domyślaj :P
|
|
Winner Temat założony przez niniejszego użytkownika |
» 2014-12-13 12:48:00 map_x1 =(( przesuniecie / 50 ) *( - 1 ) ); std::cout << map_x1 << std::endl; if( mapa[ 0 ][ map_x1 ] != 0 ) { col = pixel[ 0 ].getPixel( 1, 1 ); if( col == sf::Color( 255, 255, 255 ) ) { GraMario.close(); } } Takie coś mi wyszło. Wydaje mi się że zrobiłem zwykłą kolizje na kafelkach...(starałem się tego uniknąć). Narazie działa dosyć dobrze, chociaż kiedyś też kolizja na kafelkach działała mi dobrze a później wszystko zaczęło się sypać :/ Dzięki za pomoc :) Jakbyś miał jeszcze jakieś propozycje jak lepiej zrobić tą kolizje per pixel to chętnie wysłucham. |
|
colorgreen19 |
» 2014-12-13 18:13:00 z tego kodu to jedyne co widze to to, ze aplikacja zamknie się jak pixel(1,1) z obrazka bedzie biały? Może napisze ci jak ja bym to widział: pseudo kod while( stan_gry != Wyjscie ) { for( int i = 0; i < ilosc_kafelkow_mapy_x; i++ ) { for( int j = 0; j < ilosc_kafelkow ) mapy_y; j++ ) { if( kafelek[ i ][ j ] != pustego_kafelka ) { if( kafelek[ i ][ j ] ma punkt wspolny z playerem ) { cout << "elementy sie pokrywaja, to moglibysmy skonczyc na zywklej kafelkowej kolizji, ale my jedziemy dalej z per pixel" << endl; sf::Image img = kafelek[ i ][ j ].getTexture().copyToImage() for( int kx = 0; kx < szereokosc_kafelka; kx++ ) { for( int ky = 0; ky < wysokosc_kafelka; ky++ ) { sf::Color playercolor = img.getPixel( kx, ky ); if( to_co_wyzej ) { cout << "Jest kolizja" ); } } } } } } } }
|
|
Winner Temat założony przez niniejszego użytkownika |
» 2014-12-14 14:23:04 Wielkie dzięki za kod :) postaram się go zastosować. A u mnie zrobiłem to zamykanie aplikacji tylko dla testu czy wykrywa kolor pixela na odpowiednich współrzędnych. |
|
1 « 2 » |