Weird thing here look
//CONSTRUCTOR - DE-CONSTRUCTOR
Vehicle::Vehicle() ://WE INITIALIZE ALL VARIABLES TO DEFAULT VALUES
trusterStatus(false),
machineGunStatus(false),
rocketStatus(false),
shieldStatus(true),
mineStatus(false),
velocityPoint(cocos2d::Vec2(0, 0)),
angle_I(0.0), angle_II(0.0),
slowDown(false),
m_speed(0.0),
driveStatus(true),
bulletSpawnPoint(cocos2d::Vec2(0, 0)),
bulletFirePoint(cocos2d::Vec2(0, 0)),
weaponStatus("Empty"),
position(Vec2(0, 0)),
TIScale(1.7068),//1.7068
steeringPower(5),
autoDrive(false),
angle_III(0.0),
driveOffTimer(5),
machineGunVelocity(500),
machineGunSpawnGap(50),
m_health(100),
bullets(10),
accelerateLock(false),
de_accelerateLock(false),
rocketSpeed(200),
shieldLock(false)
{
//CAR SPRITE
sprite = Sprite::create("Ship/VehicleOne/vehicleOne.png");
sprite->setPosition(Vec2(-2550 / TIscale, 1000 / TIscale));
//PHYSICS BODY
mArray[0] = cocos2d::Vec2(-26 / TIscale, -3 / TIscale);
mArray[1] = cocos2d::Vec2(-22 / TIscale, -6 / TIscale);
mArray[2] = cocos2d::Vec2(35 / TIscale, -3 / TIscale);
mArray[3] = cocos2d::Vec2(37 / TIscale, -1 / TIscale);
mArray[4] = cocos2d::Vec2(37 / TIscale, 1 / TIscale);
mArray[5] = cocos2d::Vec2(35 / TIscale, 3 / TIscale);
mArray[6] = cocos2d::Vec2(-22 / TIscale, 6 / TIscale);
mArray[7] = cocos2d::Vec2(-26 / TIscale, 3 / TIscale);
mArray[8] = cocos2d::Vec2(-26 / TIscale, -3 / TIscale);
physicsBody = PhysicsBody::createPolygon(mArray, 9, PhysicsMaterial(1, 0, 0));
physicsBody->setCollisionBitmask(4);
physicsBody->setContactTestBitmask(true);
physicsBody->setAngularDamping(10);
physicsBody->setDynamic(true);
//sprite->setPhysicsBody(physicsBody);
//SHIELD PHYSCIS BODY INITIALIZED FOR LATER USE
shieldArray[0] = cocos2d::Vec2(-30 / TIscale, -13 / TIscale);
shieldArray[1] = cocos2d::Vec2(-36 / TIscale, -9 / TIscale);
shieldArray[2] = cocos2d::Vec2(-40 / TIscale, -2 / TIscale);
shieldArray[3] = cocos2d::Vec2(-40 / TIscale, 2 / TIscale);
shieldArray[4] = cocos2d::Vec2(-36 / TIscale, 9 / TIscale);
shieldArray[5] = cocos2d::Vec2(-30 / TIscale, 13 / TIscale);
shieldArray[6] = cocos2d::Vec2(40 / TIscale, 12 / TIscale);
shieldArray[7] = cocos2d::Vec2(47 / TIscale, 7 / TIscale);
shieldArray[8] = cocos2d::Vec2(50 / TIscale, 2 / TIscale);
shieldArray[9] = cocos2d::Vec2(50 / TIscale, -2 / TIscale);
shieldArray[10] = cocos2d::Vec2(47 / TIscale, -7 / TIscale);
shieldArray[11] = cocos2d::Vec2(40 / TIscale, -12 / TIscale);
shieldArray[12] = cocos2d::Vec2(-30 / TIscale, -13 / TIscale);
physicsBodyShield = PhysicsBody::createPolygon(shieldArray, 13, PhysicsMaterial(0, 0, 0));
sprite->addComponent(physicsBody);
}
In this class I have a deploy shield function
void Vehicle::deployShield()
{
shieldStatus = false;
sprite->removeComponent(physicsBody);
sprite->addComponent(physicsBodyShield);
}
Now above caused null pointer error when i assign new physics body
BUT
If I do this, all im doing is moving that line of code from constructor to this function, it works, the creating physics Shield body… Then it works, why is that ? Do you have any idea ?
void Vehicle::deployShield()
{
shieldStatus = false;
sprite->removeComponent(physicsBody);
physicsBodyShield = PhysicsBody::createPolygon(shieldArray, 13, PhysicsMaterial(0, 0, 0));
sprite->addComponent(physicsBodyShield);
}