DanielSC Temat założony przez niniejszego użytkownika |
[SFML]Pozycja x y kafli w mapach kafelkowych » 2013-01-18 17:22:31 Chciałbym się was zapytać czy polozenie x ,y na osi odpowiada czemus takiemu dla mapy kafelkowej : int mapa[x][y] czyli jak bym wstawił takie wartosci jak x=1,x=1; to pozcja jednego kaflaw rowna jest (1,1) ? |
|
Mrovqa |
» 2013-01-18 17:38:27 czyli jak bym wstawił takie wartosci jak x=1,x=1; to pozcja jednego kaflaw rowna jest (1,1) ? |
Zależy co masz konkretnie na myśli. Kafel może mieć różną wielkość = przy wyliczaniu współrzędnych musisz użyć przeliczników. |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2013-01-18 18:32:39 Zaluszżmy ze kafel ma wysokosc 50 i szerokosc 50 |
|
Mrovqa |
» 2013-01-18 18:43:17 Czego nie rozumiesz? int mapa[ X ][ Y ];
int pix_pos_x = x * ROZMIAR_KAFLA_X; int pix_pos_y = y * ROZMIAR_KAFLA_Y;
gdzie (x,y) to indeksy kafla w tablicy 'mapa', a (pix_pos_x,pix_pos_y) to współrzędne górnego lewego rogu na ekranie/w buforze. |
|
Gabes |
» 2013-01-18 18:49:12 |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2013-01-18 20:00:03 W tamtym temacie wog óle mapy nie umiałem wyswietlić :D A gdybym miał np mape z 100 kafelkami i kwadrat. Chciałbym sprawdzać kolizje dla kazdego kafla a pisanie wszystkiego po kolei było by czasochłonnym zadaniem. Prubowałem użyć pętli for np: for( i = 0; i < 5; i++ ) { for( j = 0; j < 5; j++ ) { if( mapa1[ j ][ i ] == 1 ) Aplikacja.Draw( trawa ); trawa.SetPosition( i * s2, j * w2 ); kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), s2, w2 ); cout << kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), s2, w2 ) << endl; if( sterowanie.IsKeyDown( Key::Left ) && kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), 100, 100 ) == false ) { kwadrat1.Move( - 0.2, 0 ); x1 -= 0.2; } if( sterowanie.IsKeyDown( Key::Right ) && kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), 100, 100 ) == false ) { kwadrat1.Move( 0.2, 0 ); x1 += 0.2; } if( sterowanie.IsKeyDown( Key::Down ) && kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), 100, 100 ) == false ) { kwadrat1.Move( 0, 0.2 ); y1 += 0.2; } if( sterowanie.IsKeyDown( Key::Up ) && kolizja( x1, y1, 100, 100,( i * s2 ),( j * w2 ), 100, 100 ) == false ) { kwadrat1.Move( 0, - 0.2 ); y1 -= 0.2; } } }
A tu funkcja: bool kolizja( double x1, double y1, double s1, double w1, double x2, double y2, double s2, double w2 ) { if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 ) return true; else if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 ) return true; else return false; };
Ale program nie działa tak jak założyłem że po wykryciu kolizji z obojetnie jakims kaflem kwadrat1 nie moze sie ruszyc. |
|
Berux |
» 2013-01-18 20:03:47 |
|
SeaMonster131 |
» 2013-01-18 21:20:33 Pozycję kafelka, na którym aktualnie znajduje się obiekt możesz sobie wyliczyć tak: int kafX = obiekt.x / szerokosc_kafelka; int kafY = obiekt.y / wysokosc_kafelka;
if( mapa[ kafX ][ kafY ] == 1 ) { }
Wziąłem pod uwagę lewy górny wierzchołek obiektu, dla pozostałych po prostu dodajesz szerokość / wysokość obiektu. |
|
« 1 » 2 |