[XNA] Problem med borttagning av fiender

Permalänk
Medlem

[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.

Visa signatur

Acer Aspire 5551G @ Ubuntu 12.04

Permalänk
Medlem

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(); } }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Det påverkade dock inte resultat något.

Visa signatur

Acer Aspire 5551G @ Ubuntu 12.04

Permalänk
Medlem

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..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd

player property IsOnGround är uppenbarligen True hela tiden.

Permalänk
Medlem

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).

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd

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

Permalänk
Medlem
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.

Visa signatur

Acer Aspire 5551G @ Ubuntu 12.04

Permalänk
Avstängd
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.

Permalänk
Medlem

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.

Visa signatur

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