[SOLVED] Gravity is colliding with collide detection

Hello, I’m new here.
I’m coding platform game. I had been stuck on collision detection for 3 days, finally I’ve solved it.
But now I have to pull player down when he doesn’t intersect anything. I did it this way:

Runnable gravity = new Runnable() {
		public void run() {
			while (true) {
				player.y += yspeed;
				collide.gravity();
				repaint();
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	};

//Gravity method:
	public void gravity() {
		for (int i = 0; i < box.getX().length; i++)
			if (player.getBounds().intersects(box.getBounds(i))
					&& game.yspeed != 0) {
				game.yspeed = 0;
				break;
			} else {
				game.yspeed = 1;
			}
	}

And it works well, player is going down and stops when collides. But there’s one glitch caused by right-left collision. Player can’t move.

check() method:

	public void check() {
		// collision from right side
		for (int i = 0; i < box.getX().length; i++) {
			if (player.getBounds().intersects(box.getBounds(i))
					&& player.xspeed > 0) {
				setLeft(true);
			} else if (!player.getBounds().intersects(box.getBounds(i))
					&& player.xspeed < 0) {
				setLeft(false);
			}
			if (player.getBounds().intersects(box.getBounds(i))
					&& player.xspeed < 0) {
				setRight(true);
			} else if (!player.getBounds().intersects(box.getBounds(i))
					&& player.xspeed > -1) {
				setRight(false);
			}
		}
	}

And methods responsible for movement:

@Override
	public void keyPressed(KeyEvent e) {
		int key = e.getKeyCode();
		switch (key) {
		case KeyEvent.VK_LEFT:
			left = true;
			game.collide.check();
			move();
			break;
		case KeyEvent.VK_RIGHT:
			right = true;
			game.collide.check();
			move();
			break;
		case KeyEvent.VK_UP:
			y -= 3;
			game.repaint();
			break;
		case KeyEvent.VK_DOWN:
			y += 3;
			game.repaint();
			break;
		default:
			break;
		}
	}

	private void move() {
		if (left) {
			leftSpeed = 1;
			xspeed = 1;
			scroll();
		} else if (right) {
			leftSpeed = 1;
			xspeed = -1;
			scroll();
		}
	}

	public boolean dudeLeftCollision() {
		return game.collide.left;
	}

	public boolean dudeRightCollision() {
		return game.collide.right;
	}

	private void scroll() {
		if (dudeLeftCollision() && !dudeRightCollision()) {
			leftSpeed = 0;
			rightSpeed = -1;
			for (int i = 0; i < game.box.getX().length; i++) {
				game.box.getX()[i] = game.box.getX()[i];
			}
		}
		if (!dudeLeftCollision() && dudeRightCollision()) {
			leftSpeed = 0;
			rightSpeed = 1;
			for (int i = 0; i < game.box.getX().length; i++) {
				game.box.getX()[i] = game.box.getX()[i];
			}
		}
		if (!dudeLeftCollision() && !dudeRightCollision()) {
			for (int i = 0; i < game.box.getX().length; i++) {
				game.box.getX()[i] += xspeed;
			}
		}
		game.repaint();
	}

It’s my story. I have to figure out how to code collision-detection gravity-right-left without any glitches.

Hope you help me,
Thank you,
Szinek

I wonder if my english is very bad.

Oops, wrong board? I should write this in “Game Mechanics”?

Don’t use a dedicated thread just for gravity.
Unite gravity and key input based movement, collision detection, etc. The only difference should be the movement’s source, but of that the mechanic stuff should not need to be informed.
Maybe have two classes, one for gravity and one for keyboard input to deliver velocity and acceleration values. Talk to them through a common interface.

I just read about game loops (I didn’t have :-X), did some research and finally I got this working.

Now I can go ahead with game physics.