Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Kolizja z użyciem getpixel()

Ostatnio zmodyfikowano 2019-11-10 01:30
Autor Wiadomość
pekfos
» 2019-11-09 23:41:50
C/C++
#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';
    }
}
P-175516
R0ut4
Temat założony przez niniejszego użytkownika
» 2019-11-09 23:48:30
Moja reakcja:
https://i.kym-cdn.com/photos​/images/facebook/000/698/489​/2f7.png

Dziękuję ci bardzo!!! Kiedyś ci postawię piwo (albo soczek, zależy co wolisz :D )


Po wklejeniu tego wykryło, że to wirus :D
P-175517
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?!

C/C++
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)) ===
P-175518
pekfos
» 2019-11-10 00:01:53
C/C++
if( sf::Color m1 = img1.getPixel( 0, 0 ) )
Co ty tu chcesz porównać ze sobą? To jest równoznaczne z
C/C++
sf::Color m1 = img1.getPixel( 0, 0 );
if( m1 )
pomijając kwestię zakresu widoczności m1. Czy warunek ma się wykonać, czy nie? Zielony..
P-175519
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...
P-175520
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.
P-175521
R0ut4
Temat założony przez niniejszego użytkownika
» 2019-11-10 00:45:37
Na jakiej zasadzie to działa?
P-175522
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.
C/C++
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.
P-175523
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona