2013-12-11, 18:54
  #1
Medlem
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.

Kod:
void GameEntity :: bulletCollision()
{

	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.
http://i.imgur.com/iRSew9l.png
__________________
Senast redigerad av qpB 2013-12-11 kl. 19:22.
Citera
2013-12-11, 20:09
  #2
Medlem
Värt att nämna är att x är den yttre for-loopen och i den inre.
Citera
2013-12-11, 20:30
  #3
Medlem
Löste det med en enkel if-sats och satte den under i's for-loop.

Kod:
	if (bulletHit == true)
	{

		delete pShot[x];
		pShot[x] = pShot[bCount - 1];
		bCount--;

	}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in