• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kolizje w grze 2d

0 głosów
153 wizyt
pytanie zadane 11 stycznia w C i C++ przez devi Początkujący (320 p.)

Jestem w trakcie tworzenia gry 2d w której mają zachodzić kolizje pomiędzy różnymi ścianami, problem polega w tym obiekt gracza nie zatrzymuje się na ścianach..

oto tablica ścian na planszy: 

Box wall[]{		{-43.0f,43.0f,-34.0f,36.0f},	{-27.0f,43.0f,-10.0f,36.0f},	{10.0f,43.0f,27.0f,36.0f},
				{ 34.0f,43.0f,43.0f,36.0f },	{-43.0f,28.0f,-34.0f,23.0f},	{-27.0f,28.0f,-23.0f,3.50f},
				{-27.0f,15.0f,-10.0f,11.25f},	{-14.0f,28.0f,14.0f,23.0f},		{-2.0f,28.0f,2.0f,11.30f},
				{23.0f,28.0f,27.0f,3.50f},		{10.0f,15.0f,27.0f,11.30f},		{43.0f,23.0f,34.0f,28.0f},
				{-14.5f,3.5f,-14.0f,-3.5f},		{-14.5f,3.5f,-4.0f,3.0f},		{-14.5f,-3.0f,14.5f,-3.5f},
				{14.0f,3.5f,14.5f,-3.5f},		{4.0f,3.5f,14.5f,3.0f},			{-27.0f,-3.50f,-23.0f,-15.0f},
				{-2.0f,-11.30f,2.0f,-26.70f},	{-14.5f,-3.50f,27.0f,-15.0f},	{-43.0f,-21.70f,-35.0f,-24.70f},
				{-38.0f,-21.70f,-35.0f,-34.0f},	{-27.0f,-21.70f,-10.0f,-26.70f},{10.0f,-21.70f,27.0f,-26.70f},
				{35.0f,-21.70f,38.0f,-34.0f},	{35.0f,-21.70f,43.0f,-24.70f},	{-43.0f,-41.0f,-10.0f, -43.0f},
				{-27.0f,-33.70f,-23.0f,-43.0f},	{-14.5f,-33.70f,14.5f,-34.70f},	{-2.0f,-33.70f,2.0f,-43.0f},
				{10.0f,-41.0f,43.0f,-43.0f},	{23.0f,-33.70f,27.0f,-43.0f},	{-52.0f,6.0f,-3.5f,3.5f},
				{-37.0f,15.0f,-3.5f,3.5f},		{-52.0f,15.0f,-3.5f,13.0f},		{-52.0f,52.0f,-50.0f,13.0f},
				{-52.0f,52.0f,52.0f,50.0f},		{-2.0f,52.0f,2.0f,36.0f},		{50.0f,52.0f,52.0f,13.0f},
				{35.0f,15.0f,52.0f,13.0f},		{35.0f,15.0f,37.0f,3.5f},		{35.0f,6.0f,52.0f,3.5f},
				{-52.0f,-3.5f,35.0f,-6.0f},		{-37.0f,-3.5f,-35.0f,-15.0f},	{-52.0f,-13.0f,-35.0f,-15.0f},
				{-52.0f,-13.0f,-50.0f,-52.0f},	{-5.0f,-32.0f,-4.5f,-34.0f},	{-52.0f,-50.0f,52.0f,-52.0f},
				{50.0f,-13.0f,52.0f,-52.0f},	{45.0f,-32.0f,52.0f,-34.0f},	{35.0f,-13.0f,52.0f,-15.0f},
				{35.0f,-3.5f,37.0f,-15.0f},		{35.0f,-3.5f,52.0f,-6.0f}
																													};

a oto algorytm na wyszukiwanie kolizji oraz funkcja ktora sprawdza czy w danym momencie postać gracza nie koliduje z żadną ściana.

 

bool is_colliding(Box A, Box B)
{
	if (A.left < B.left + B.width &&
	A.left + A.width > B.left &&
	A.top < B.top + B.height &&
	A.height + A.top > B.top)
	{
		return true;
	}
	else return false;
}

 

bool isCollision(Box box[], Box Pac)
{
	for (int i = 0; i < 53; i++)
	{
		if (is_colliding(box[i], Pac) == true)
			return true;

		else return false;
	}
}

obiekt gracza jest okręgiem który w kodzie opisuję jako Box,

okrąg ma promień 2.5f, i pozycja startowa to : Posx = 0.0f, Posy = -30.0f
(Posx,Posy)

jego współrzędne są ustawione (Posx-r, Posy+r, Posx+r, Posy-r)

if (_key == GLUT_KEY_RIGHT && !isCollision(wall,Pacman))
        {
                Posx += 0.5f;
        }

tak wyglada konstruktor obiektu Box

Bo(x,y,X,Y)
x - wspolrzedna x lewego gornego wierzcholka

y - wspolrzedna y lewego gornego wierzcholka

X - wspolrzedna x prawego dolnego wierzcholka

Y - wspolrzedna Y prawego dolnego wierzcholka

width = X - x

height = y - Y

 

gdyby był ktoś kto jest w stanie mi pomóc byłbym bardzo wdzięczny.

1 odpowiedź

0 głosów
odpowiedź 11 stycznia przez playerony Stary wyjadacz (14,920 p.)
Wydaje mi się, że w funkcji is_colliding należy zamienić iloczyn logiczny(&&) na sume logiczną(||), gdzyż np. kolizja z lewej i prawej strony nie wystąpi jednocześnie w tym samym czasie.

Podobne pytania

0 głosów
3 odpowiedzi 196 wizyt
pytanie zadane 3 lipca w C i C++ przez Programista3 Bywalec (2,900 p.)
+2 głosów
3 odpowiedzi 132 wizyt
pytanie zadane 19 marca w C i C++ przez Nekronomik Początkujący (420 p.)
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 31 października 2016 w C i C++ przez NieznanyV2 Nowicjusz (160 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,717 zapytań

76,654 odpowiedzi

149,843 komentarzy

18,124 pasjonatów

Przeglądających: 116
Pasjonatów: 1 Gości: 115

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...