# Android Game Development problem with Speed = Distance / Time

I have been coding speed for an object. I have made it so the object will move from one end of the screen to another at a speed depending on the screen size, at the monemt I have made it so it will take one second to pass the screen. So i have worked out the speed in code but when I go to assign the speed it tells me to force close and i do not understand why. Here is the code:

### MainGame Code:

@Override
protected void onDraw(Canvas canvas) {
setBlockSpeed(getWidth());
}

private int blockSpeed;
private void setBlockSpeed(int screenWidth){
Log.d(TAG, "screenWidth " + screenWidth);
blockSpeed = screenWidth / 100; // 100 is the FPS.. i want it to take 1 second to pass the screen
Math.round(blockSpeed); // to make it a whole number
block.speed = blockSpeed; // this is line 318!! if i put eg block.speed = 8; it still tells me to force close
}


### Block.java Code:

public int speed;

public void draw(Canvas canvas) {
canvas.drawBitmap(bitmap, x - (bitmap.getWidth() / 2), y - (bitmap.getHeight() / 2), null);
if(dontmove == 0){
this.x -= speed; // if it was eg this.x -= 18; it would not have an error

}
}


### The exception

06-08 13:22:34.315: E/AndroidRuntime(2801): FATAL EXCEPTION: Thread-11
06-08 13:22:34.315: E/AndroidRuntime(2801): java.lang.NullPointerException
06-08 13:22:34.315: E/AndroidRuntime(2801):     at com.charltonsantana.game.MainGame.setBlockSpeed(MainGame.java:318)
06-08 13:22:34.315: E/AndroidRuntime(2801):     at com.charltonsantana.game.MainGame.onDraw(MainGame.java:351)

• From looking at the code my guess would be that block=null, e.g. it's not assigned an object. Jun 7 '12 at 21:47
• I would change question title, before clicking on it I was thinking problem was the final app file size being too big. Jun 8 '12 at 12:31
• what do you think i should change it too? Jun 8 '12 at 12:32
• mabye Android Game Development problem with speed = distance / time ?? Jun 8 '12 at 12:33

Is your block object previously created?

In MainGame code, there is no need to round as currently written. The result of an int divided by an int is an int. Instead, cast to double by dividing by 100.0 and the round by adding 0.5 and casting result to an int

For example:

int screenWidth = 150;
int blockSpeed = screenWidth/100;
System.out.println("way #1 before round, blockSize is "+blockSpeed);
Math.round(blockSpeed);
System.out.println("way #1 after round, blockSize is "+blockSpeed);
blockSpeed = (int)((screenWidth/100.0)+0.5);
System.out.println("way #2, blockSize is "+blockSpeed);


Output:

way #1 before round, blockSize is 1
way #1 after round, blockSize is 1
way #2, blockSize is 2

• You should look into the markdown formatting guide and get clearer on how you can format your posts with it. :) Jun 7 '12 at 22:48
• The problem is not at the math.round,if i just put a code in which says 'block.speed = 18;' it still tells be to force close. Il update my post with my error log. Jun 8 '12 at 12:27
• The error log is telling you that you've got a null pointer on line 318 of MainGame.java. "block" is likely null...did you initialize it in setup?
– amb
Jun 8 '12 at 14:09
• what do you mean initialize it in setup? Jun 8 '12 at 14:33
• in your onCreate method do you create a new block object?
– amb
Jun 8 '12 at 14:39