pekfos |
» 2019-11-09 23:41:50 #include <SFML/Graphics.hpp> #include <iostream>
int main() { sf::Image img; img.loadFromFile( "plik.png" ); for( unsigned i = 0; i < img.getSize().x; ++i ) { sf::Color c = img.getPixel( i, 0 ); std::cout <<( int ) c.r << ' ' <<( int ) c.g << ' ' <<( int ) c.b << ' ' <<( int ) c.a << '\n'; } }
|
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-11-09 23:48:30 |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-11-09 23:56:28 Nadal jesteś PRO, ja jestem N00B... Co ja robię źle?! if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { sf::Image img1; sf::Image p1; img1.loadFromFile( "map1.png" ); p1.loadFromFile( "wojownik.png" ); if( sf::Color m1 = img1.getPixel( 0, 0 ) ) ) { player.move( 0, - 5 ); } else { player.setPosition( 100, 100 ); } }
błędy: ||=== Build: Debug in platformowka (compiler: GNU GCC Compiler) === In function 'int main()': error: could not convert 'm1' from 'sf::Color' to 'bool' ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) === |
|
pekfos |
» 2019-11-10 00:01:53 if( sf::Color m1 = img1.getPixel( 0, 0 ) )
Co ty tu chcesz porównać ze sobą? To jest równoznaczne z sf::Color m1 = img1.getPixel( 0, 0 ); if( m1 ) pomijając kwestię zakresu widoczności m1. Czy warunek ma się wykonać, czy nie? Zielony.. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-11-10 00:04:09 Był drugi warunek ale go skasowałem nie wiem czemu... Jesteś geniuszem
EDIT:
Wracamy do punktu wyjścia, a przynajmniej ja :/ Mój mózg się przez to już całkiem zlansował...
Chyba nawet złego sposobu chce użyć, bo color.getPixel mi w sumie nic nie da, bo to przecież porównuje Kolory pikseli i jeżeli one są sobie równeto będzie postać sobie nadał szła... |
|
pekfos |
» 2019-11-10 00:35:20 Sprawdzanie kolorów pikseli jest jedną z metod sprawdzania kolizji. Tylko że trzeba sprawdzać więcej niż jeden piksel. To się nazywa pixel perfect collision. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-11-10 00:45:37 Na jakiej zasadzie to działa? |
|
pekfos |
» 2019-11-10 01:13:20 Wiesz jakie piksele postaci oraz terenu mogą kolidować (decydujesz jakoś na po ich kolorach, być może mając różne kryteria dla kolorów postaci i terenu) i jeśli piksel postaci mogący kolidować pokrywa się się z mogącym kolidować pikselem terenu, to zachodzi kolizja. for( int i = 0; i < rozmiar_postaci_x; ++i ) for( int j = 0; j < rozmiar_postaci_y; ++j ) if( moze_kolidowac_postac( postac.getPixel( i, j ) ) && moze_kolidowac_teren( teren.getPixel( i + pozycja_postaci_x, j + pozycja_postaci_y ) ) ) wykryto_kolizje();
Do tego wypada mieć jakieś sprawdzanie, czy nie wychodzi się poza zakresy obrazu terenu. Takie wykrywanie kolizji jest dużo wolniejsze od kolizji prostokątów. Jeśli prostokąty zawierające obiekty ze sobą nie kolidują, to obiekty tym bardziej. Dlatego wciąż dobrze jest sprawdzać przybliżone kolizje prostokątami, żeby unikać niepotrzebnego testowania pikseli. |
|
1 « 2 » 3 |