Moving problem (Side-scroller)

Hello !

I currently have a problem with my Side-scroller. (I’m using SLICK2D)
My player moves correctly(the background in fact), and the collisions are working correctly too.
But I don’t really know how to move correctly my monster entity, because they don’t move with the background…

Here are my codes:

Player.java :

package com.poulpicious.gtw.entities;

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.StateBasedGame;

public class Player extends LivingEntity {

	public Player(float x, float y, float width, float height) {
		super(x, y, width, height);
		screenXPos = 400;
	}

	@Override
	public void render(GameContainer gc, StateBasedGame sbg, Graphics g) {
		g.setColor(Color.white);
		g.draw(new Rectangle(screenXPos - width / 2 + 1, yPos, width, height));
	}

	@Override
	public void update(GameContainer gc, StateBasedGame sbg, int delta, Input input) {
		if (input.isKeyDown(Input.KEY_Q)) {
			xDir = -2;
		}
		if (input.isKeyDown(Input.KEY_D)) {
			xDir = 2;
		}
		if (input.isKeyDown(Input.KEY_LSHIFT)) {
			xDir *= 1.4;
		}
		if (input.isKeyDown(Input.KEY_SPACE) && hasJump) {
			yDir = (float) -(4);
			hasJump = false;
			startJumpY = yPos;
		}

		startX = xPos;
		startY = yPos;
		startXDir = xDir;
		startYDir = yDir;

		collidingTop = false;

		moveBounds();
		gravity();
		move();
		handleCollisions();
		xDir = 0;
	}

	public void moveBounds() {
		bounds.setLocation(xPos + xDir, yPos + yDir);
	}

	public void move() {
		xPos += xDir;
		yPos += yDir;
	}

	public void gravity() {
		yDir += 0.06;
	}

	private void handleCollisions() {
		for (Rectangle rec : blocks) {

			Rectangle rect = new Rectangle(rec.getX() - screenXPos + width / 2 - 1, rec.getY(), rec.getWidth(), rec.getHeight());

			float[] points = bounds.getPoints();

			if (rect.contains(points[4] - 2, points[5] + 2) || rect.contains(points[6] + 2, points[7] + 2)) {
				yPos = startY;
				yDir = 0;
				hasJump = true;
				collidingTop = true;
			}

			if (rect.intersects(getBounds()) && collidingTop == false) {
				xPos = startX;
				xDir = startXDir;
			}
		}
	}

	public float getRealXPos() {
		return screenXPos + width / 2 - 1;
	}
}

MobEntity.java :

package com.poulpicious.gtw.entities;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.StateBasedGame;

public class MobEntity extends LivingEntity {

	private Player thePlayer;

	public MobEntity(Player player, float x, float y, float width, float height) {
		super(x, y, width, height);
		thePlayer = player;
		isAlive = true;
		screenXPos = x;
	}

	@Override
	public void render(GameContainer gc, StateBasedGame sbg, Graphics g) {
		g.draw(new Rectangle(xPos - screenXPos, yPos, width, height));
	}

	@Override
	public void update(GameContainer gc, StateBasedGame sbg, int delta, Input input) {
		if (thePlayer.getRealXPos() < xPos - screenXPos) {
			xDir = -2;
		}
		if (thePlayer.getRealXPos() > xPos - screenXPos) {
			xDir = 2;
		}
		startX = xPos;
		startY = yPos;
		startXDir = xDir;
		startYDir = yDir;

		collidingTop = false;

		moveBounds();
		gravity();
		move();
		handleCollisions();
		xDir = 0;
	}

	public void moveBounds() {
		bounds.setLocation(xPos + xDir, yPos + yDir);
		System.out.println(bounds.getX());
	}

	public void move() {
		xPos += xDir;
		yPos += yDir;
	}

	public void gravity() {
		yDir += 0.06;
	}

	private void handleCollisions() {
		for (Rectangle rec : blocks) {

			Rectangle rect = new Rectangle(rec.getX() - screenXPos, rec.getY(), rec.getWidth(), rec.getHeight());
			float[] points = bounds.getPoints();

			if (rect.contains(points[4] - 2, points[5] + 2) || rect.contains(points[6] + 2, points[7] + 2)) {
				yPos = startY;
				yDir = 0;
				hasJump = true;
				collidingTop = true;
			}

			if (rect.intersects(getBounds()) && collidingTop == false) {
				xPos = startX;
				xDir = startXDir;
			}
		}
	}

	public boolean isAlive() {
		return isAlive;
	}

}

Monster don’t move with background, they just jumping from edge of screen when background has rolled until the certain point.

Sorry, I didn’t say it: my game is more like Super Smash Bros Brawl, so you can go to left or right, and the enemies want to hit you…