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:
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.