Como fazer uma imagem que se move ficar acima do fundo que tambem se move?

Bom dia, estou criando um prototipo de um jogo side scrolling, inseri a imagem de background
e criei uma logica que dependendo da movimentação da imagem do background na tela ao chegar no eixo x = 1024, ele recria a imagem 1020 pixel a frente

porem ao inserir a imagem da nave junto com a movimentação usando o teclado, a imagem de background se sobrepoe a imagem da nave, fazendo ela não ficar visivel

Principal.java

    package Principal;

import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import modelo.Game;

public class Principal {

	public static final int LARGURA_TELA = 1024;
	public static final int ALTURA_TELA = 630;
	
	// construtor
	public Principal() {

		// Criação do objeto que representa a janela da aplicação
		JFrame janela = new JFrame("STAR IMPACT");
		Game game = new Game();
		// configurar os diversos aspectos da janela
		game.setPreferredSize(new Dimension(LARGURA_TELA, ALTURA_TELA));
		janela.setResizable(false); // evita o redimensionamento da janela
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setLocation(100,100); // define a posição de ancoragem da janela
		janela.setVisible(true); // torna a janela visivel na tela
		janela.getContentPane().add(game);
		janela.pack();
	}
	
	public static void main(String[] args) {
		new Principal();
	}
}

Game.java

package modelo;

import Principal.Principal;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class Game extends JPanel{
	
	// ATRIBUTOS ---------------------------------------------------------
	public NaveJogador navejogador;
        public FundoEspaco fundoespaco;
        public FundoEspaco fundoespacob;
        
	// os estados de pressionamento das teclas direcionais
	public boolean k_cima = false;
	public boolean k_baixo = false;
	public boolean k_direita = false;
	public boolean k_esquerda = false;
	
	// CONSTRUTOR ---------------------------------------------------------
	public Game() {
		// adiciona o escutador de eventos de pressionamento do teclado
		
		addKeyListener(new KeyListener(){
			@Override
			public void keyTyped(KeyEvent e) {}

			@Override
			public void keyPressed(KeyEvent e) { // escutador de pressionamento de tecla
				switch (e.getKeyCode()) {
				case KeyEvent.VK_UP: // tecla cima
					k_cima = true;
					break;
				case KeyEvent.VK_DOWN: // tecla baixo
					k_baixo = true;
					break;
				case KeyEvent.VK_LEFT: // tecla esquerda
					k_esquerda = true;
					break;
				case KeyEvent.VK_RIGHT: // tecla direita
					k_direita = true;
					break;
				}
			}
			@Override
			public void keyReleased(KeyEvent e) { // escutados da soltura de tecla
				switch (e.getKeyCode()) {
				case KeyEvent.VK_UP: // tecla cima
					k_cima = false;
					break;
				case KeyEvent.VK_DOWN: // tecla baixo
					k_baixo = false;
					break;
				case KeyEvent.VK_LEFT: // tecla esquerda
					k_esquerda = false;
					break;
				case KeyEvent.VK_RIGHT: // tecla direita
					k_direita = false;
					break;
				}
			}
			
		});
		
		navejogador = new NaveJogador();
                fundoespaco = new FundoEspaco();
                fundoespacob = new FundoEspaco();
                
                fundoespacob.posX = fundoespacob.posX + 1024;
                
                fundoespaco.velX = fundoespaco.velX - 6;
                fundoespacob.velX = fundoespacob.velX - 6;
                
		setFocusable(true); // para poder tratar eventos
		setLayout(null);
		
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				gameloop(); // dispara o gameloop do jogo
			}
		});
		thread.start();
	}
	
	
	// GAMELOOP ---------------------------------------------------------
	public void gameloop() {
		while(true) { // cada repeti��o � um quadro do jogo
			handlerEvent();
			update();
			render();

			try {// dando uma pause de 17 milisegundos (60FPS)
				Thread.sleep(17);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} 
		}
	}
	
	public void handlerEvent(){

	}
	public void update() {

                //move a cada quadro 1 px a direita
                fundoespaco.posX += fundoespaco.velX;
                
                fundoespacob.posX += fundoespacob.velX;
            
                testeFundo();
                
		testeColisao();
	}
	public void render() {
		repaint(); // for�ar o redesenho da tela
	}
	
	// M�TODOS ---------------------------------------------------------
        public void testeFundo()
        {
            
            if((fundoespaco.posX+1024) <= 0)//se saiu pela esquerda da tela
            {
                
                //reposiciona fundoespaco para tras do fundoespacob
                fundoespaco.posX = fundoespacob.posX + 1020;
                
            }    
            
            if((fundoespacob.posX+1024) <= 0)//se saiu pela esquerda da tela
            {
                
                //reposiciona fundoespaco para tras do fundoespacob
                fundoespacob.posX = fundoespaco.posX + 1020;
                
            }              
            
        }        
        
	public void testeColisao() {
		// colisão da navejogador com o lado direito da tela
		if(navejogador.posX+(navejogador.raio*2) >= Principal.LARGURA_TELA) {
			System.out.println("Colidiu!");
			navejogador.posX = navejogador.posX - navejogador.velX; // desfaz o movimento horizontal
		}
		// colisão da navejogador com o lado esquerdo da tela
		if(navejogador.posX <= 0) {
			System.out.println("Colidiu!");
			navejogador.posX = navejogador.posX - navejogador.velX; // desfaz o movimento horizontal
		}
		
		// colisão da navejogador com o lado inferior da tela
		if(navejogador.posY+(navejogador.raio*2) >= Principal.ALTURA_TELA ) {
			System.out.println("Colidiu!");
			navejogador.posY = navejogador.posY - navejogador.velY; // desfaz o movimento vertical
		}
		// colisão da navejogador com o lado superior da tela
		if(navejogador.posY <= 0) {
			System.out.println("Colidiu!");
			navejogador.posY = navejogador.posY - navejogador.velY; // desfaz o movimento vertical
		}
	}
	
	
	// M�TODOS ESPECIAIS ---------------------------------------------------------
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);	
                
                
                
		g.drawImage(navejogador.parada, navejogador.posX, navejogador.posY, this);
                g.drawImage(fundoespaco.imagem, fundoespaco.posX, fundoespaco.posY, null);
                g.drawImage(fundoespacob.imagem, fundoespacob.posX, fundoespacob.posY, null);
                
                
	}
}

FundoEspaco.java

package modelo;

import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class FundoEspaco 
{
    
    public BufferedImage imagem;
    
    
    public int posX;
    public int posY;
    
    public int velX;
    
    public FundoEspaco()
    {
        
        try
        {
            
            imagem = ImageIO.read(getClass().getResource("/imagens/background.jpg"));
            
        }
        catch(Exception e)
        {
            
            e.printStackTrace();
            
        }
        
        posX = 0;
        posY = 0;
        velX = 0;
        
    }        
    
}

NaveJogador.java

package modelo;

import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

/* Representa o personagem do jogo */
public class NaveJogador { 
	public BufferedImage parada;

	
	public int posX;
	public int posY;
	public int raio;
	public int velX;
	public int velY;
	
	public NaveJogador() {
		
		// faz o carregamento das imagens
		try {
			parada = ImageIO.read(getClass().getResource("/imagens/nave.png"));

		}catch(Exception e) {
			e.printStackTrace();
		}
		
		posX=100;
		posY=100;
		raio=50;
		velX=0;
		velY=0;
	}
}

BACKGROUND

NAVE:
nave

Você precisa desenhar as imagens de fundo antes da nave.
Dessa forma a nave será pintada por cima do fundo.

Dica:
Você não precisa de dois objetos fundoespaco, basta usar um só e pintar ele em posições diferentes, vai economizar memória