allegro kolizje

0

a więc napisałem kolizje i mój problem jest taki że gdy program wykryje kolizje to ma odpychac ludzika no i tak też robi ale niekiedy robi tak ze jak nacine prawy kursor i jest kolizja i wtedy nacisne lewy zeby odunac sie od obiektu to czasami ludzik zawraca przechodzi przez obiekt na ktorym jest kolizja i przechodzi na lewa strone tak jest ze wszystkimi kierunkami


if( kolizja( ludek_x,ludek_y,ludek_s, ludek_w, postac_x- mapa_x, postac_y-mapa_y, postac_s, postac_w)==true)
{ if (key[KEY_RIGHT]) {ludek_x-=2;} 
  if (key[KEY_LEFT]){ludek_x+=2;}  
  if (key[KEY_DOWN]){ludek_y-=2;} 
  if (key[KEY_UP]){ludek_y+=2;} 
}
0

Pomogę jak wytłumaczysz poprawnie gramatycznie w jęz. polskim, bo teraz z tej jednozdaniowej wypowiedzi to nic nie zrozumiałem.

BTW. W jakim ty układzie współrzędnych działasz skoro strzałka w prawo odejmuje wartość na osi X czyli się cofa?

0

to jest kolizja zeby mi nie przechodzil ludzik przez obiekt to musze go minusowac. A wiec do rzeczy kiedy pochodze do obiektu i mam np wcisniety prawy kursor to kolizja dziala i odpycha moja postac. Lecz czasami gdy mam wcisniety prawy przycisk i kolizja sie spelni i chce aby ludzik sie odsunal od obiektu to naciskam lewy kursor. No i przejdzmy do meritum gdy naciskam ten lewy to ludzik zamiast isc w lewo przechodzi mi przez obiekt na druga strone . I problem w tym zeby mi tego nie robil

0

Pokaż no jeszcze tą funkcję "kolizja".

0
 bool kolizja( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 )
{
    if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true );

    return( false );
};
0
Mateusz napisał(a)

bool kolizja( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 )
{
if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true );
return( false );

};


za taki kod powinni kulki obrywać ;) Spróbuj umieścić współrzędne w jakiejś strukturze lub klasie żeby nabrało to przejrzystości.

Mała uwaga ode mnie:

warunki typu
```cpp
if(warunek) cos tam;
else cos tam;

w c++ można zapisywać operatorem:

(warunek) ? cos tam : cos tam;

a kod typu:

bool example(int a, int b)
{
     if(a > b) return true;
     return false;
} 

lepiej zapisać tak:

inline bool example(int a, int b) { return a > b; }
0

to jak pomoże ktoś?

0

To jeszcze wytłumacz tą funkcję, bo nie chce mi się rozszyfrowywać jak to działa.

0

po prostu jest to sprawdzanie czy krawędzie się na siebie nakładają i tyle

0

To jest gra na kafelkach czy można je potraktować, że obiekty mają obwód typu okrąg lub prostokąt?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0