[XNA] Problem med borttagning av fiender

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Dec 2006

[XNA] Problem med borttagning av fiender

Sitter och kodar nåt som ska likna en klon av Mario till NES.Har kört fast på hur jag ska göra för att ta bort mina fiender när de dör. Eftersom jag inte hittat nåt sätt att kontrollera på vilken axel Mario kolliderar med fienden så skrev jag en if-sats som kontrollerar om mario är i luften när de kolliderar men det fungerar inte riktigt och jag förstår inte varför så nu vänder jag mig hit. Värt att nämna är att jag använder mig av plattform starterkittet som ingår i XNA.

Min kod ser ut på följande sätt:

if (enemy.BoundingRectangle.Intersects(Player.BoundingRectangle)) { if (player.IsOnGround == false) enemy.IsAlive = false; else OnPlayerKilled(); }

Det som inträffar är att den bara går rakt på else och dödar spelaren.

Acer Aspire 5551G @ Ubuntu 12.04

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Du borde nog nästa dina if-satser i detta läge

if (enemy.BoundingRectangle.Intersects(Player.BoundingRectangle)) { if (player.IsOnGround == false) { enemy.IsAlive = false; } else { OnPlayerKilled(); } }

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Dec 2006

Det påverkade dock inte resultat något.

Acer Aspire 5551G @ Ubuntu 12.04

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Kolla om IsOnGround verkligen blir satt till false när du hoppar. Testa även

else if enemy.IsAlive {
// döda spelaren
}

för att försäkra dig om att det inte är en död fiende som dödar spelaren..

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Avstängd
Plats
STOCKHOLM
Registrerad
Nov 2007

player property IsOnGround är uppenbarligen True hela tiden.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Behöver inte vara så, kan även vara så att fienden aldrig tas bort. När player landar så dör han iom att han fortfarande är i kontakt med fienden. Logiken testar aldrig ifall fienden är farlig (dvs inte död).

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Avstängd
Plats
STOCKHOLM
Registrerad
Nov 2007

enemy har ingen metod för att dö. Kollar just själv exemplet i xna 3.1

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Dec 2006
Citat:

Ursprungligen inskrivet av MartenKL
enemy har ingen metod för att dö. Kollar just själv exemplet i xna 3.1

Nu va jag inte riktigt med.

Acer Aspire 5551G @ Ubuntu 12.04

Trädvy Permalänk
Avstängd
Plats
STOCKHOLM
Registrerad
Nov 2007
Citat:

Ursprungligen inskrivet av DecievE
Nu va jag inte riktigt med.

Det finns ingen destructor, enemy tas aldrig bort. Såvida du inte utökat den klassen själv.

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Okt 2006

Så länge du har en referens till din Enemy så kommer den finnas kvar.

Så låt oss säga att du har en collection av fiender, tex en Lista.

Sedan stegar du igenom listan för att uppdatera och rita ut fienderna på skärmen, när fienden sedan dör tar du bort den från listan och då kommer Garbage Collectorn i C# automatiskt ta bort den från minnet.

Cpu: AMD Athlon 4600 X2 Ram: Corsair 2040 DDR2 Graphics: GeForce 8800 GT Alpha Dog Edition Power: Hiper 580W Storage:2x Westen Digital 250GB / 500GB Chassi: Apevia X-Plorer Black.
PSN: huxs