Why does this cause a jump when switching directions?

I have tried to figure this out for like 6 hours now… I can’t figure out why it causes a jump when I switch directions.


	public void doMovement(long now) {
		move_north = false;
		move_south = false;
		move_east = false;
		move_west = false;
		
		if(keys[KeyEvent.VK_UP] == 1 && keys[KeyEvent.VK_DOWN] == 0) {
			move_north = true;
			moving_south = false;
		}
		if(keys[KeyEvent.VK_DOWN] == 1 && keys[KeyEvent.VK_UP] == 0) {
			move_south = true;
			moving_north = false;
		}
		if(keys[KeyEvent.VK_LEFT] == 1 && keys[KeyEvent.VK_RIGHT] == 0) {
			move_west = true;
			moving_east = false;
		}
		if(keys[KeyEvent.VK_RIGHT] == 1 && keys[KeyEvent.VK_LEFT] == 0) {
			move_east = true;
			moving_west = false;
		}
		
		if(move_north && !moving_north) {
			if(player.move(player.x, player.y + 1, player.z)) {
				moving_north = true;
				offsety = -32;
			}
		}
		if(move_south && !moving_south) {
			if(player.move(player.x, player.y - 1, player.z)) {
				moving_south = true;
				offsety = 32;
			}
		}
		
		if(move_west && !moving_west) {
			if(player.move(player.x -1, player.y, player.z)) {
				moving_west = true;
				offsetx = -32;
			}
		}
		if(move_east && !moving_east) {
			if(player.move(player.x + 1, player.y, player.z)) {
				moving_east = true;
				offsetx = 32;
			}
		}
		
		if(now > offset_timer) {
			offset_timer = now + offset_timer_length;
			if(offsetx < 0) offsetx ++;
			if(offsetx > 0) offsetx --;
			if(offsety < 0) offsety ++;
			if(offsety > 0) offsety --;
		}
		
		if(offsetx == 0) {
			moving_east = false;
			moving_west = false;
		}
		if(offsety == 0) {
			moving_north = false;
			moving_south = false;
		}
		
	}

If “jumping” means “changing player.z”, then the problem is not here, since player.z is modified nowhere in the code your shared.

A good point to start investigating would be to trace or add break points to every place where player.z is edited, and see what happens when you change direction.

Edit: to clarify, Z is just the “map” you’re on.

by jump i mean, a sudden “large” shift in offset position.

I DID figure it out though, JUST NOW


	public void doMovement(long now) {
		move_north = false;
		move_south = false;
		move_east = false;
		move_west = false;
		
		if(keys[KeyEvent.VK_UP] == 1 && keys[KeyEvent.VK_DOWN] == 0) {
			move_north = true;
			moving_south = false;
		}
		if(keys[KeyEvent.VK_DOWN] == 1 && keys[KeyEvent.VK_UP] == 0) {
			move_south = true;
			moving_north = false;
		}
		if(keys[KeyEvent.VK_LEFT] == 1 && keys[KeyEvent.VK_RIGHT] == 0) {
			move_west = true;
			moving_east = false;
		}
		if(keys[KeyEvent.VK_RIGHT] == 1 && keys[KeyEvent.VK_LEFT] == 0) {
			move_east = true;
			moving_west = false;
		}
		
		if(move_north && !moving_north && !moving_south && offsety == 0) {
			if(player.move(player.x, player.y + 1, player.z)) {
				moving_north = true;
				offsety = -32;
			}
		}
		if(move_south && !moving_south && !moving_north && offsety == 0) {
			if(player.move(player.x, player.y - 1, player.z)) {
				moving_south = true;
				offsety = 32;
			}
		}
		
		if(move_west && !moving_west && !moving_east && offsetx == 0) {
			if(player.move(player.x -1, player.y, player.z)) {
				moving_west = true;
				offsetx = -32;
			}
		}
		if(move_east && !moving_east && !moving_west && offsetx == 0) {
			if(player.move(player.x + 1, player.y, player.z)) {
				moving_east = true;
				offsetx = 32;
			}
		}
		
		if(now > offset_timer) {
			offset_timer = now + offset_timer_length;
			if(offsetx < 0) offsetx ++;
			if(offsetx > 0) offsetx --;
			if(offsety < 0) offsety ++;
			if(offsety > 0) offsety --;
		}
		
		if(offsetx == 0) {
			moving_east = false;
			moving_west = false;
		}
		if(offsety == 0) {
			moving_north = false;
			moving_south = false;
		}
		
	}

The above code does not allow any visual shifts