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

[SFML] Kolizja kafelkowa - organizacja kodu

Ostatnio zmodyfikowano 2014-08-31 13:19
Autor Wiadomość
Acarin1995
Temat założony przez niniejszego użytkownika
[SFML] Kolizja kafelkowa - organizacja kodu
» 2014-08-26 21:37:46
Witam mam problem z kolizją działa tylko na niektórych blokach... I czasami nie na tych co trzeba... Nie wiem co zrobiłem źle.
C/C++
while( App.isOpen() )
{
    px = postac.getPosition().x / 16; // Os x
    py = postac.getPosition().y / 16; // Os y
    sf::Event zdarzenie;
    while( App.pollEvent( zdarzenie ) )
    {
        if( zdarzenie.type == sf::Event::Closed )
             App.close();
       
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
        {
            if( mapa[ px ][ py - 16 ] == 0 || mapa[ px ][ py - 16 ] == 2 )
                 postac.move( 0, - 16 );
           
        }
        else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
        {
            if( mapa[ px ][ py + 16 ] == 0 || mapa[ px ][ py + 16 ] == 2 )
                 postac.move( 0, 16 );
           
        }
        else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
        {
            if( mapa[ px - 16 ][ py ] == 0 || mapa[ px - 16 ][ py ] == 2 )
                 postac.move( - 16, 0 );
           
        }
        else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
        {
            if( mapa[ px ][ py + 16 ] == 0 || mapa[ px ][ py + 16 ] == 2 )
                 postac.move( 16, 0 );
           
        }
       
    }
    App.clear( sf::Color::White );
    Mapa.rysujjMape();
    App.draw( postac );
    App.display();
}
[ cpp ]
Kafelek ma 16x16 pixeli tak samo posta ć.
P-116189
pekfos
» 2014-08-26 21:43:01
C/C++
if( mapa[ px ][ py - 16 ] == 0 || mapa[ px ][ py - 16 ] == 2 )
Na pewno 16 powinno tu być?
P-116190
DejaVu
» 2014-08-26 21:46:32
Polecam Ci pomyśleć jak wykrywać kolizje kafelkowe w czytelniejszy sposób. np.
C/C++
if( !czyKolizja( mapa, aktualna_pozycja.x - 1, aktualna_pozycja.y ) )
     przesunPozycje( aktualna_pozycja, - 1, 0 );

albo:
C/C++
Pozycja nowaPozycja = aktualnaPozycja;
if( lewo )
     nowaPozycja.x -= 1;

if( prawo )
     nowaPozycja.x += 1;

if( gora )
     nowaPozycja.y -= 1;

if( dol )
     nowaPozycja.y += 1;

if( !mapa.czyKolizja( nowaPozycja ) )
     aktualnaPozycja = nowaPozycja;

P-116192
Acarin1995
Temat założony przez niniejszego użytkownika
» 2014-08-27 08:44:23
Macie racje panowie pomyliłem cyfre... Dzięki Pekfos powinno być 1 a nie 16... :D
A propo kolizji jak ograniczyć Gracza by nie wychodzić poza mape? Kolizja z blokiem koloru tła?
P-116233
pekfos
» 2014-08-27 10:17:44
A propo kolizji jak ograniczyć Gracza by nie wychodzić poza mape? Kolizja z blokiem koloru tła?
Prościej sprawdzić współrzędne, ale kombinuj jak uważasz.
P-116238
Acarin1995
Temat założony przez niniejszego użytkownika
» 2014-08-31 12:16:33
C/C++
if( mapa[ px ][ py - 1 ] == 0 || mapa[ px ][ py - 1 ] == 2 ) &&( py > 0 && px > 0 ) &&( px < granicax && py < granicay )
granica y i x wynosi 160.
Postać wychodzi poza obie granice co jest nie tak?
P-116450
pekfos
» 2014-08-31 13:19:08
Zmniejsz je o 1.
P-116452
« 1 »
  Strona 1 z 1