Here's a GIF depicting the way I want my ball to bounce.

And here's the code, the problem currently unsolved. "dstRect" is a custom class that allows me to blit a bitmap onto the Canvas:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| private void jump() { double value = Math.cos(radians + Math.PI) * multiplier; dstRect.left -= position[2] + oldXOffset; dstRect.right += position[2] + oldXOffset; dstRect.top -= position[2] + oldXOffset; dstRect.bottom += position[2] + oldXOffset; position[2] = (float) value + 8; radians += 0.1 * radianSpeed; if (radians > 2 * Math.PI) { multiplier -= 4; value = Math.cos(radians + Math.PI) * multiplier; oldXOffset += position[2] - (float) value + 8; radians = 0; radianSpeed += 2; if (multiplier < 2.0) { jumping = false; multiplier = 8; oldXOffset = 0f; radianSpeed = 1; position[2] = 0f; for (int i = 0; i < 2; i++) speed[i] = 0f; } } } |

The problem is this:

It starts off by triggering a switch, where the ball itself goes into a jumping state.

- On the first jump, it is normal. Ball starts jumping from the ground, flies into the air, and back down to the ground.
- On the second jump, it starts glitching out. Ball starts from the middle in the air, flies even higher, and back to the middle.
- On the third and last jump, the ball starts 1/3 from the peak of its jump, flies up to its peak, and back down 1/3 from its peak.

After that, the ball exits the jumping state, the ball goes back to the ground.

I wished I could think more on this.