Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

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)
06-08 13:22:34.315: E/AndroidRuntime(2801):     at com.charltonsantana.game.MainThread.run(MainThread.java:64)
share|improve this question
1  
From looking at the code my guess would be that block=null, e.g. it's not assigned an object. –  Matsemann 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. –  tigrou Jun 8 '12 at 12:31
    
what do you think i should change it too? –  Charlton Santana Jun 8 '12 at 12:32
    
mabye Android Game Development problem with speed = distance / time ?? –  Charlton Santana Jun 8 '12 at 12:33

2 Answers 2

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
share|improve this answer
    
You should look into the markdown formatting guide and get clearer on how you can format your posts with it. :) –  Jonathan Hobbs Jun 7 '12 at 22:48
    
Thanks Jonathan –  amb Jun 7 '12 at 23:22
    
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. –  Charlton Santana 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? –  Charlton Santana Jun 8 '12 at 14:33

Is your block object previously created?

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.