protected boolean verticalLevelCollision() {
		// we do the same for the Y-axis
		int direction = (int) (this.speedY/Math.abs(this.speedY)); // -1 for top, 1 for bottom)
		double startPos = this.posY;
		if (direction == 1)
			startPos +=this.height;
		
		for (int i = -3; i <= Math.abs(this.speedY);i++) {
			for (int j = (int) this.posX; j<= (this.posX+this.width);j++) {
				
				// we check each pixel. if there is a collision, we do the same thing for the X-axis
				if (j >= 0 && j <= this.updater.getLevel().getCache().getWidth() && startPos+i*direction >= 0 && startPos+i*direction <= this.updater.getLevel().getCache().getHeight()) {
					
					// we test this pixel.
					int color = this.updater.getLevel().getCache().getRGB(j,(int) startPos+i*direction);
					// there is a collision ? bad
					if (color == (new Color(208,0,0).getRGB())) {
						// so this position cannot be joined, we get back to the previous line
						this.posY += (i)*direction;

						// and we have a collision, so we stop the speed
						this.speedY = 0;
						this.state = Player.STATE_STANDING;
						// and we stop the test
						return true;
					}
				}
			}
		}
		// we finish all the tests, we don't hit anything, it's good !
		// so let's move
		this.posY += this.speedY;
		return true;
	}