[SFML 2.1] Problem z kolizją z wielokątem
Ostatnio zmodyfikowano 2014-01-12 21:21
Piotr020798 Temat założony przez niniejszego użytkownika |
[SFML 2.1] Problem z kolizją z wielokątem » 2014-01-06 16:05:17 Witam. Mam taką siatkę: http://scr.hu/1xxi/5fibd I mam problem z kolizją. Mój kod kolizji: for( int i = 0; i < 50; i++ ) { for( int j = 0; j < 25; j++ ) { if( siatka[ j ][ i ].getGlobalBounds().contains( okno.mapPixelToCoords( Mouse::getPosition( okno ), widok ) ) ) { } } }
Kafle są tworzone za pomocą sf::ConvexShape. Problemem jest zasięg kolizji, który jest zbyt duży, tak jakby kafle były zwykłymi prostokątami. Zasięg jednego kafla jest mniej-więcej taki: http://scr.hu/1xxi/jgvvk Jak mam zmodyfikować mój kod, aby dział poprawnie? |
|
pekfos |
» 2014-01-06 16:10:55 Bo są prostokątami. A przynajmniej z punktu widzenia getGlobalBounds(). |
|
Piotr020798 Temat założony przez niniejszego użytkownika |
» 2014-01-06 16:23:32 To jak to można zrobić inaczej? |
|
pekfos |
» 2014-01-06 16:29:24 Dopisz dodatkowy warunek. getGlobalBounds() dostarcza Ci wystarczająco dużo informacji. |
|
Piotr020798 Temat założony przez niniejszego użytkownika |
» 2014-01-06 16:45:24 Jakiś przykład? |
|
pekfos |
» 2014-01-06 16:57:58 Nie za wygodnie? Masz prostokąt z wpisanym rombem, gdzie przekątne rombu są długościami boków prostokąta. Możesz wyznaczyć równania prostych współliniowych z bokami rombu. Wtedy wystarczy sprawdzić, czy dla danego X, Y mieści się między tymi prostymi (X i Y to współrzędne myszki). |
|
fortas |
» 2014-01-07 15:05:56 1. Zle napisane petle: for( int i = 0; i < 50; i++ ) { for( int j = 0; j < 25; j++ ) { if( siatka[ j ][ i ].getGlobalBounds().contains( okno.mapPixelToCoords( Mouse::getPosition( okno ), widok ) ) ) { } } } 2. Sprobuj wykorzystac metode intersects zamiast contains. Przy evencie poruszania myszka tworz nowy IntRect z cordami myszki i porownuj do kolejnych elementow siatki. |
|
pekfos |
» 2014-01-07 17:32:20 |
|
« 1 » 2 3 |