Permalänk
Medlem

Mitt spel kraschar när..

Hej!

Har stött på ett problem i mitt spelprojekt och har inte kommit fram till någon lösning. Jag har hittat problemet och det händer endast när 2+ enemies overlappar (med en vinge eller dylikt) och ett skott träffar dem båda.

{ for (int x = 0; x < bCount; x++) { //GETS CURRENT BULLETS RECTANGLE pShot[x]->getBoundingBox(&bRect); for (int i = 0; i < capacity; i++) { //GET ENEM SHIPS RECTANGLE eShip[i]->getBoundingBox(&eRect); //CHECK IF TWO RECTANGLES COLLIDES if (bRect.Intersect(&eRect)) { //UPDATE PLAYER SCORE pShip->setPlayerScore(); posY = -80.0f; posX = hge->Random_Float(0, mScreenMaxHeight - 70.0f); speed = (hge->Random_Float(0.5, 2.5)); delete eShip[i]; eShip[i] = new Enemy(eTexture, posX, speed); delete pShot[x]; pShot[x] = pShot[bCount - 1]; //NEXT LINE TO BE EXECUTED bCount--; } } } }

Output är då alltså:
Unhandled exception at 0x20746F6E in ProjectTemplate.exe: 0xC0000005: Access violation executing location 0x20746F6E.

Har suttit i flera timmar med detta problem och hittar verkligen ingen lösning. Har provat använda mig av ett bool-värde, samt att göra en hitCount, nedera fungerar. Utöver det fungerar koden felfritt.

E:
Här får ni en bild med output, felet och koden från en annan krasch.
http://i.imgur.com/iRSew9l.png

E; Värt att nämna är att x är den yttre for-loopen och i den inre.

Permalänk
Medlem

Löste det med en enkel if-sats och satte den under i's for-loop.

if (bulletHit == true) { delete pShot[x]; pShot[x] = pShot[bCount - 1]; bCount--; }

Permalänk
Medlem

Jag skulle gissa att det är bCount som ställer till det. Har du koll på hur mycket du räknar ner den? Finns ju en risk att du eventuellt får ett negativt värde på den, vilket inte är lyckat om du indexerar på det. Testa lägga till en värderange-koll på den.

Visa signatur

"Inte alltid, bara ibland"

Permalänk
Medlem
Skrivet av Klixman:

Jag skulle gissa att det är bCount som ställer till det. Har du koll på hur mycket du räknar ner den? Finns ju en risk att du eventuellt får ett negativt värde på den, vilket inte är lyckat om du indexerar på det. Testa lägga till en värderange-koll på den.

Löste redan problemet, lösningen står ovan om du är intresserad. Tack ändå!

Permalänk
Medlem

Jo, men vet du vad som orsakade felet? Kan ju vara en intressant lärdom.

Visa signatur

"Inte alltid, bara ibland"

Permalänk
Medlem

Om jag förstår helt rätt vad du vill göra så gör du fel
När du vet att ett skott har träffat en enemy, då tar du bort skottet.
Detta innebär ju att aktuellt skott omöjligt kan träffa ett annat skepp.
Då bör du avbryta loopen.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770