C# XNA lista

0

Cześć,
piszę grę w XNA i natknąłem się na problem którego nie potrafię rozwiązać.
Mianowicie chodzi o kolizję z budynkami.
W game1 tworzę listę tych budynków, a później w Player w foreach sprawdzam kolizję z nimi, i jeśli jest to zeruje speed i nie daje się wykonywać instrukcją przy wciskaniu klawiszy.

//W Postaci
 foreach (Budynek b in Game1.listbudynk)
                {
                    if (top.Intersects(b.kwadrat))
                    {
                        
                        kolizjaGora = true;
                        speed.Y = 0;
                    }
                    else
                        kolizjaGora=false;

                    if (bot.Intersects(b.kwadrat))
                    {
                        kolizjaDol = true;
                        speed.Y = 0;
                    }
                    else
                        kolizjaDol = false;

                    if (left.Intersects(b.kwadrat))
                    {
                        kolizjaLewa = true;
                        speed.X = 0;
                    }
                    else
                        kolizjaLewa = false;

                    if (right.Intersects(b.kwadrat))
                    {
                        kolizjaPrawa = true;
                        speed.X = 0;
                    }
                    else
                        kolizjaPrawa = false;


                }

//Przykladowy ruch
if (kolizjaLewa == false)
                {
                    if (kb.IsKeyDown(Keys.A))
                    {
                        if (speed.X >= -3)
                            speed.X += -1;
                    }
                    else
                    {
                        if (speed.X < 0)
                            speed.X += 1;
                    }
                }

top,bot itd, to prostokaty 1x1 po srodku kazdego boku tekstury postaci.
Lista z budynkami robi się w inicjalizacji w Game1.

Po uruchomieniu wygląda to tak że wszystko dobrze działa tylko dla ostatniego elementu listy, czyli dla budynku który stworzyłem ostatni. Dla całej reszty przy kolizji postać zwalnia do 1 i przechodzi przez budynek.
Nie wiem jak to możliwe.
Pomocy!

0

Dla każdego budynku ustawiasz na kolizję true lub false. Nic dziwnego, że zostają wartości dla ostatniego budynku.
Nie wnikając w projekt powinieneś mieć raczej tak (przykładowo):

kolizjaGora = false;
kolizjaDol = false;
kolizjaLewo = false;
kolizjaPrawo = false;
foreach (Budynek b in Game1.listbudynk)
{
   if (top.Intersects(b.kwadrat))
   {
      kolizjaGora = true;
   }
/***** reszta ifów analogicznie*****/
}
if (kolizjaGora || kolizjaDol)
{
    speed.Y = 0;
}
if (kolizjaPrawo || kolizjaLewo)
{
   speed.X = 0;
}

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