I’m using AndEngine to make a game for the Android platform. I need to detect if a circular body contacts a circular sprite. To do this, I’m calculating the centers and radii of both and using pythag to determine if they are indeed touching. However, I keep getting a nullpointerexception when I try to get the x coordinate of my body. spriteNum increases every time the screen it touched and a sprite is created. Any ideas why? My code:
public class grow implements Runnable{
Sprite sp;
Body body[] = new Body[100];
public grow(Sprite sprite){
sp = sprite;
}
@Override
public void run() {
float radf, rads; //fill radius/stationary radius
float[] fill; //fillx/stationaryx
float fx=0, fy=0, sx, sy;
while(down){
//Log.e("Tag","Running thread. Down = "+Boolean.toString(down));
yourSprite[spriteNum].setScale(scale += 0.1);
fill = yourSprite[spriteNum].getSceneCenterCoordinates();
fill[0]=fx;
fill[1]=fy;
radf=yourSprite[spriteNum].getHeightScaled()/2;
Log.e("Fill X before for",Float.toString(fx));
if(spriteNum>0)
for(int x=0;x<spriteNum;x++){
rads=yourSprite[x].getHeightScaled()/2;
sx = body[x].getWorldCenter().x; //Null pointer exception
sy = body[x].getWorldCenter().y;
if(Math.sqrt(Math.pow((fx-sx),2)+Math.pow((fy-sy),2))<(radf+rads))
down = false;
Log.e("Fill x",Float.toString(fx));
Log.e("Stat x",Float.toString(sy));
}
try {
Thread.sleep(75);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
body[spriteNum] = PhysicsFactory.createCircleBody(mPhysicsWorld, yourSprite[spriteNum], BodyType.DynamicBody, FIXTURE_DEF);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(yourSprite[spriteNum], body[spriteNum], true, true));
if(body[0]!=null)
Log.e("Body created","not null"); //This says it's not null, but when I did the same thing just inside of my for() loop and it did say it was null
}
I guess it’s because you have initialized body array
Body body[] = new Body[100]but not individualBodyelements in it. So when you accessbody[x]it returns null. You should also initialize body elements in array. Something like:Another cause that came into my mind for your problem is, you said:
So it can be possible that you have initialized some body elements on startup and then when sprite count increases you do not create new elements in body array, so when you try
body[0]it is not null but for new sprites for which body elements may not have been initialized you get null and thus NPE.